| // Test bindings-after-at with or-patterns and box-patterns |
| |
| // run-pass |
| |
| #![feature(box_patterns)] |
| |
| #[derive(Debug, PartialEq)] |
| enum MatchArm { |
| Arm(usize), |
| Wild, |
| } |
| |
| #[derive(Debug, PartialEq)] |
| enum Test { |
| Foo, |
| Bar, |
| Baz, |
| Qux, |
| } |
| |
| fn test(foo: Option<Box<Test>>) -> MatchArm { |
| match foo { |
| ref bar @ Some(box Test::Foo | box Test::Bar) => { |
| assert_eq!(bar, &foo); |
| |
| MatchArm::Arm(0) |
| }, |
| Some(ref bar @ box Test::Baz | ref bar @ box Test::Qux) => { |
| assert!(**bar == Test::Baz || **bar == Test::Qux); |
| |
| MatchArm::Arm(1) |
| }, |
| _ => 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(1)); |
| assert_eq!(test(None), MatchArm::Wild); |
| } |