diff options
| author | Keegan McAllister <kmcallister@mozilla.com> | 2014-05-19 15:14:23 -0700 |
|---|---|---|
| committer | Keegan McAllister <kmcallister@mozilla.com> | 2014-05-28 12:42:21 -0700 |
| commit | fd40d0cf5b873ebc94b64fb1abcf2e14fd38dcf7 (patch) | |
| tree | 76e6f9b3a67aa519bb07766ab2bb3e75a78aec4f | |
| parent | 55776f28221e3da7dd31c2c6c5e05f7a9a31381f (diff) | |
| download | rust-fd40d0cf5b873ebc94b64fb1abcf2e14fd38dcf7.tar.gz rust-fd40d0cf5b873ebc94b64fb1abcf2e14fd38dcf7.zip | |
Test pattern macros
| -rw-r--r-- | src/test/compile-fail/macro-incomplete-parse.rs | 8 | ||||
| -rw-r--r-- | src/test/compile-fail/pattern-macro-hygeine.rs | 18 | ||||
| -rw-r--r-- | src/test/run-pass/macro-pat.rs | 75 |
3 files changed, 101 insertions, 0 deletions
diff --git a/src/test/compile-fail/macro-incomplete-parse.rs b/src/test/compile-fail/macro-incomplete-parse.rs index 43ba2c8a8a5..94386858d29 100644 --- a/src/test/compile-fail/macro-incomplete-parse.rs +++ b/src/test/compile-fail/macro-incomplete-parse.rs @@ -22,8 +22,16 @@ macro_rules! ignored_expr { () => ( 1, 2 ) //~ ERROR macro expansion ignores token `,` } +macro_rules! ignored_pat { + () => ( 1, 2 ) //~ ERROR macro expansion ignores token `,` +} + ignored_item!() fn main() { ignored_expr!() + match 1 { + ignored_pat!() => (), + _ => (), + } } diff --git a/src/test/compile-fail/pattern-macro-hygeine.rs b/src/test/compile-fail/pattern-macro-hygeine.rs new file mode 100644 index 00000000000..0b6a14c0fc9 --- /dev/null +++ b/src/test/compile-fail/pattern-macro-hygeine.rs @@ -0,0 +1,18 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(macro_rules)] + +macro_rules! foo ( () => ( x ) ) + +fn main() { + let foo!() = 2; + x + 1; //~ ERROR unresolved name `x` +} diff --git a/src/test/run-pass/macro-pat.rs b/src/test/run-pass/macro-pat.rs new file mode 100644 index 00000000000..6dc663c5620 --- /dev/null +++ b/src/test/run-pass/macro-pat.rs @@ -0,0 +1,75 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(macro_rules)] + +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>) -> uint { + 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 + }); +} |
