diff options
Diffstat (limited to 'tests/ui/macros/macro-pat.rs')
-rw-r--r-- | tests/ui/macros/macro-pat.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/ui/macros/macro-pat.rs b/tests/ui/macros/macro-pat.rs new file mode 100644 index 000000000..baf816e53 --- /dev/null +++ b/tests/ui/macros/macro-pat.rs @@ -0,0 +1,65 @@ +// run-pass + +macro_rules! mypat { + () => ( + Some('y') + ) +} + +macro_rules! char_x { + () => ( + 'x' + ) +} + +macro_rules! some { + ($x:pat) => ( + Some($x) + ) +} + +macro_rules! indirect { + () => ( + some!(char_x!()) + ) +} + +macro_rules! ident_pat { + ($x:ident) => ( + $x + ) +} + +fn f(c: Option<char>) -> usize { + match c { + Some('x') => 1, + mypat!() => 2, + _ => 3, + } +} + +pub fn main() { + assert_eq!(1, f(Some('x'))); + assert_eq!(2, f(Some('y'))); + assert_eq!(3, f(None)); + + assert_eq!(1, match Some('x') { + Some(char_x!()) => 1, + _ => 2, + }); + + assert_eq!(1, match Some('x') { + some!(char_x!()) => 1, + _ => 2, + }); + + assert_eq!(1, match Some('x') { + indirect!() => 1, + _ => 2, + }); + + assert_eq!(3, { + let ident_pat!(x) = 2; + x+1 + }); +} |