| // Test bindings-after-at with box-patterns | |
| //@ run-pass | |
| #![feature(box_patterns)] | |
| #[derive(Debug, PartialEq)] | |
| enum MatchArm { | |
| Arm(usize), | |
| Wild, | |
| } | |
| fn test(x: Option<Box<i32>>) -> MatchArm { | |
| match x { | |
| ref bar @ Some(box n) if n > 0 => { | |
| // bar is a &Option<Box<i32>> | |
| assert_eq!(bar, &x); | |
| MatchArm::Arm(0) | |
| }, | |
| Some(ref bar @ box n) if n < 0 => { | |
| // bar is a &Box<i32> here | |
| assert_eq!(**bar, n); | |
| MatchArm::Arm(1) | |
| }, | |
| _ => MatchArm::Wild, | |
| } | |
| } | |
| fn main() { | |
| assert_eq!(test(Some(Box::new(2))), MatchArm::Arm(0)); | |
| assert_eq!(test(Some(Box::new(-1))), MatchArm::Arm(1)); | |
| assert_eq!(test(Some(Box::new(0))), MatchArm::Wild); | |
| } |