mod test_basic { struct Struct; paste::item! { impl Struct { fn []() {} } } #[test] fn test() { Struct::abc(); } } mod test_in_impl { struct Struct; impl Struct { paste::item! { fn []() {} } } #[test] fn test() { Struct::abc(); } } #[test] fn test_shared_hygiene() { paste::expr! { let [] = 1; assert_eq!([], 1); } } #[test] fn test_repeat() { const ROCKET_A: &'static str = "/a"; const ROCKET_B: &'static str = "/b"; macro_rules! routes { ($($route:ident),*) => {{ paste::expr! { vec![$( [] ),*] } }} } let routes = routes!(A, B); assert_eq!(routes, vec!["/a", "/b"]); } #[test] fn test_integer() { const CONST0: &'static str = "const0"; let pasted = paste::expr!([]); assert_eq!(pasted, CONST0); } #[test] fn test_underscore() { paste::expr! { const A_B: usize = 0; assert_eq!([], 0); } } #[test] fn test_lifetime() { paste::expr! { #[allow(dead_code)] struct S<[<'d e>]> { q: &[<'d e>] str, } } } #[test] fn test_keyword() { paste::expr! { struct []; let _ = Fmove; } } #[test] fn test_literal_str() { paste::expr! { struct []; let _ = FooBar_Baz; } } #[test] fn test_env_literal() { paste::expr! { struct []; let _ = Libenvbar; } } #[test] fn test_env_present() { paste::expr! { struct []; let _ = Libpaste; } } #[test] fn test_raw_identifier() { paste::expr! { struct []; let _ = Fmove; } } #[test] fn test_false_start() { trait Trait { fn f() -> usize; } struct S; impl Trait for S { fn f() -> usize { 0 } } paste::expr! { let x = [::f()]; assert_eq!(x[0], 0); } } #[test] fn test_local_variable() { let yy = 0; paste::expr! { assert_eq!([], 0); } } mod test_none_delimited_single_ident { macro_rules! m { ($id:ident) => { paste::item! { fn f() -> &'static str { stringify!($id) } } }; } m!(i32x4); #[test] fn test() { assert_eq!(f(), "i32x4"); } }