// run-pass
// aux-build:proc_macro_def.rs
// ignore-cross-compile

extern crate proc_macro_def;

use proc_macro_def::{attr_tru, attr_identity, identity, ret_tru, tru};

#[attr_tru]
fn f1() -> bool {
    return false;
}

#[attr_identity]
fn f2() -> bool {
    return identity!(true);
}

fn f3() -> identity!(bool) {
    ret_tru!();
}

fn f4(x: bool) -> bool {
    match x {
        identity!(true) => false,
        identity!(false) => true,
    }
}

fn main() {
    assert!(f1());
    assert!(f2());
    assert!(tru!());
    assert!(f3());
    assert!(identity!(5 == 5));
    assert!(f4(false));
}
