mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-02 07:22:42 +00:00
Add test-examples for Cfg::simplify_with
This commit is contained in:
parent
6f0544abe4
commit
4e263fe999
@ -205,6 +205,8 @@ impl Cfg {
|
||||
/// Attempt to simplify this cfg by assuming that `assume` is already known to be true, will
|
||||
/// return `None` if simplification managed to completely eliminate any requirements from this
|
||||
/// `Cfg`.
|
||||
///
|
||||
/// See `tests::test_simplify_with` for examples.
|
||||
pub(crate) fn simplify_with(&self, assume: &Cfg) -> Option<Cfg> {
|
||||
if self == assume {
|
||||
return None;
|
||||
|
@ -433,3 +433,39 @@ fn test_render_long_html() {
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_simplify_with() {
|
||||
// This is a tiny subset of things that could be simplified, but it likely covers 90% of
|
||||
// real world usecases well.
|
||||
with_default_session_globals(|| {
|
||||
let foo = word_cfg("foo");
|
||||
let bar = word_cfg("bar");
|
||||
let baz = word_cfg("baz");
|
||||
let quux = word_cfg("quux");
|
||||
|
||||
let foobar = Cfg::All(vec![foo.clone(), bar.clone()]);
|
||||
let barbaz = Cfg::All(vec![bar.clone(), baz.clone()]);
|
||||
let foobarbaz = Cfg::All(vec![foo.clone(), bar.clone(), baz.clone()]);
|
||||
let bazquux = Cfg::All(vec![baz.clone(), quux.clone()]);
|
||||
|
||||
// Unrelated cfgs don't affect each other
|
||||
assert_eq!(foo.simplify_with(&bar).as_ref(), Some(&foo));
|
||||
assert_eq!(foobar.simplify_with(&bazquux).as_ref(), Some(&foobar));
|
||||
|
||||
// Identical cfgs are eliminated
|
||||
assert_eq!(foo.simplify_with(&foo), None);
|
||||
assert_eq!(foobar.simplify_with(&foobar), None);
|
||||
|
||||
// Multiple cfgs eliminate a single assumed cfg
|
||||
assert_eq!(foobar.simplify_with(&foo).as_ref(), Some(&bar));
|
||||
assert_eq!(foobar.simplify_with(&bar).as_ref(), Some(&foo));
|
||||
|
||||
// A single cfg is eliminated by multiple assumed cfg containing it
|
||||
assert_eq!(foo.simplify_with(&foobar), None);
|
||||
|
||||
// Multiple cfgs eliminate the matching subset of multiple assumed cfg
|
||||
assert_eq!(foobar.simplify_with(&barbaz).as_ref(), Some(&foo));
|
||||
assert_eq!(foobar.simplify_with(&foobarbaz), None);
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user