41 lines
1.0 KiB
Rust
41 lines
1.0 KiB
Rust
//@ run-pass
|
|
|
|
#[derive(Debug)]
|
|
enum Other {
|
|
One,
|
|
Two,
|
|
Three,
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
enum Test {
|
|
Foo { first: usize, second: usize },
|
|
Bar { other: Option<Other> },
|
|
Baz,
|
|
}
|
|
|
|
fn test(x: Option<Test>) -> bool {
|
|
match x {
|
|
Some(
|
|
Test::Foo { first: 1024 | 2048, second: 2048 | 4096 }
|
|
| Test::Bar { other: Some(Other::One | Other::Two) },
|
|
) => true,
|
|
// wild case
|
|
Some(_) => false,
|
|
// empty case
|
|
None => false,
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
assert!(test(Some(Test::Foo { first: 1024, second: 4096 })));
|
|
assert!(!test(Some(Test::Foo { first: 2048, second: 8192 })));
|
|
assert!(!test(Some(Test::Foo { first: 42, second: 2048 })));
|
|
assert!(test(Some(Test::Bar { other: Some(Other::One) })));
|
|
assert!(test(Some(Test::Bar { other: Some(Other::Two) })));
|
|
assert!(!test(Some(Test::Bar { other: Some(Other::Three) })));
|
|
assert!(!test(Some(Test::Bar { other: None })));
|
|
assert!(!test(Some(Test::Baz)));
|
|
assert!(!test(None));
|
|
}
|