use cps::cps;
#[cps]
macro_rules! macro1 {
(a) => {
Case1A
};
(b) => {
Case1B
};
(Case1A) => {
Matched1Case1A
};
(Case2A) => {
Matched1Case2A
};
}
#[cps]
macro_rules! macro2 {
(a) => { Case2A };
(b) => { Case2B };
(Case1A) => { Matched2Case1A };
(Case2A) => { Matched2Case2A };
(stringify_1_2) =>
let $x:tt = macro1!(a) in
let $y:tt = macro2!(b) in
{
stringify!($x).to_owned() + stringify!($y)
};
(stringify_2_1) =>
let $x:tt = macro2!(a) in
let $y:tt = macro1!(b) in
{
stringify!($x).to_owned() + stringify!($y)
};
(stringify_sequential_1_2) =>
let $x:tt = macro1!(a) in
let $y:tt = macro2!($x) in
{
stringify!($y)
};
(stringify_sequential_2_1) =>
let $x:tt = macro2!(a) in
let $y:tt = macro1!($x) in
{
stringify!($y)
};
}
#[test]
fn stringify_1_2_call() {
assert_eq!(macro2!(stringify_1_2), "Case1ACase2B");
}
#[test]
fn stringify_2_1_call() {
assert_eq!(macro2!(stringify_2_1), "Case2ACase1B");
}
#[test]
fn stringify_sequential_1_2_call() {
assert_eq!(macro2!(stringify_sequential_1_2), "Matched2Case1A");
}
#[test]
fn stringify_sequential_2_1_call() {
assert_eq!(macro2!(stringify_sequential_2_1), "Matched1Case2A");
}