| // Test or-patterns with box-patterns |
| |
| //@ run-pass |
| |
| #![feature(box_patterns)] |
| |
| #[derive(Debug, PartialEq)] |
| enum MatchArm { |
| Arm(usize), |
| Wild, |
| } |
| |
| #[derive(Debug)] |
| enum Test { |
| Foo, |
| Bar, |
| Baz, |
| Qux, |
| } |
| |
| fn test(x: Option<Box<Test>>) -> MatchArm { |
| match x { |
| Some(box Test::Foo | box Test::Bar) => MatchArm::Arm(0), |
| Some(box Test::Baz) => MatchArm::Arm(1), |
| Some(_) => MatchArm::Arm(2), |
| _ => MatchArm::Wild, |
| } |
| } |
| |
| fn main() { |
| assert_eq!(test(Some(Box::new(Test::Foo))), MatchArm::Arm(0)); |
| assert_eq!(test(Some(Box::new(Test::Bar))), MatchArm::Arm(0)); |
| assert_eq!(test(Some(Box::new(Test::Baz))), MatchArm::Arm(1)); |
| assert_eq!(test(Some(Box::new(Test::Qux))), MatchArm::Arm(2)); |
| assert_eq!(test(None), MatchArm::Wild); |
| } |