Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/cfg/src/tests.rs')
| -rw-r--r-- | crates/cfg/src/tests.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/crates/cfg/src/tests.rs b/crates/cfg/src/tests.rs index ea04114d3a..bdc3f854e0 100644 --- a/crates/cfg/src/tests.rs +++ b/crates/cfg/src/tests.rs @@ -1,3 +1,4 @@ +use arbitrary::{Arbitrary, Unstructured}; use expect_test::{expect, Expect}; use mbe::syntax_node_to_token_tree; use syntax::{ast, AstNode}; @@ -131,6 +132,18 @@ fn nested() { } #[test] +fn regression() { + check_dnf("#![cfg(all(not(not(any(any(any()))))))]", expect![[r##"#![cfg(any())]"##]]); + check_dnf("#![cfg(all(any(all(any()))))]", expect![[r##"#![cfg(any())]"##]]); + check_dnf("#![cfg(all(all(any())))]", expect![[r##"#![cfg(any())]"##]]); + + check_dnf("#![cfg(all(all(any(), x)))]", expect![[r##"#![cfg(any())]"##]]); + check_dnf("#![cfg(all(all(any()), x))]", expect![[r##"#![cfg(any())]"##]]); + check_dnf("#![cfg(all(all(any(x))))]", expect![[r##"#![cfg(x)]"##]]); + check_dnf("#![cfg(all(all(any(x), x)))]", expect![[r##"#![cfg(all(x, x))]"##]]); +} + +#[test] fn hints() { let mut opts = CfgOptions::default(); @@ -191,3 +204,21 @@ fn why_inactive() { expect![["test and test2 are enabled and a is disabled"]], ); } + +#[test] +fn proptest() { + const REPEATS: usize = 512; + + let mut rng = oorandom::Rand32::new(123456789); + let mut buf = Vec::new(); + for _ in 0..REPEATS { + buf.clear(); + while buf.len() < 512 { + buf.extend(rng.rand_u32().to_ne_bytes()); + } + + let mut u = Unstructured::new(&buf); + let cfg = CfgExpr::arbitrary(&mut u).unwrap(); + DnfExpr::new(cfg); + } +} |