diff options
Diffstat (limited to 'tests/ui/proc-macro/macro-quote-cond.rs')
-rw-r--r-- | tests/ui/proc-macro/macro-quote-cond.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/macro-quote-cond.rs b/tests/ui/proc-macro/macro-quote-cond.rs new file mode 100644 index 000000000..48307f4d9 --- /dev/null +++ b/tests/ui/proc-macro/macro-quote-cond.rs @@ -0,0 +1,46 @@ +// run-pass +// aux-build:cond_plugin.rs + +#![allow(unused_parens)] + +extern crate cond_plugin; + +use cond_plugin::cond; + +fn fact(n : i64) -> i64 { + if n == 0 { + 1 + } else { + n * fact(n - 1) + } +} + +fn fact_cond(n : i64) -> i64 { + cond!( + ((n == 0) 1) + (else (n * fact_cond(n-1))) + ) +} + +fn fib(n : i64) -> i64 { + if n == 0 || n == 1 { + 1 + } else { + fib(n-1) + fib(n-2) + } +} + +fn fib_cond(n : i64) -> i64 { + cond!( + ((n == 0) 1) + ((n == 1) 1) + (else (fib_cond(n-1) + fib_cond(n-2))) + ) +} + +fn main() { + assert_eq!(fact(3), fact_cond(3)); + assert_eq!(fact(5), fact_cond(5)); + assert_eq!(fib(5), fib_cond(5)); + assert_eq!(fib(8), fib_cond(8)); +} |