|  | #![allow(unused_must_use)] | 
|  |  | 
|  | #[allow(dead_code)] | 
|  | trait Trait { | 
|  | fn blah(&self); | 
|  | } | 
|  |  | 
|  | #[allow(dead_code)] | 
|  | struct Struct; | 
|  |  | 
|  | impl Trait for Struct { | 
|  | cfg_select! { | 
|  | feature = "blah" => { | 
|  | fn blah(&self) { | 
|  | unimplemented!(); | 
|  | } | 
|  | } | 
|  | _ => { | 
|  | fn blah(&self) { | 
|  | unimplemented!(); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn assert_eq_trailing_comma() { | 
|  | assert_eq!(1, 1,); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn assert_escape() { | 
|  | assert!(r#"☃\backslash"#.contains("\\")); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn assert_ne_trailing_comma() { | 
|  | assert_ne!(1, 2,); | 
|  | } | 
|  |  | 
|  | #[rustfmt::skip] | 
|  | #[test] | 
|  | fn matches_leading_pipe() { | 
|  | matches!(1, | 1 | 2 | 3); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn cfg_select_basic() { | 
|  | cfg_select! { | 
|  | target_pointer_width = "64" => { fn f0_() -> bool { true }} | 
|  | _ => {} | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | unix => { fn f1_() -> bool { true } } | 
|  | _ => { fn f1_() -> bool { false }} | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | target_pointer_width = "32" => { fn f2_() -> bool { false } } | 
|  | target_pointer_width = "64" => { fn f2_() -> bool { true } } | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | target_pointer_width = "16" => { fn f3_() -> i32 { 1 } } | 
|  | _ => { fn f3_() -> i32 { 2 }} | 
|  | } | 
|  |  | 
|  | #[cfg(target_pointer_width = "64")] | 
|  | assert!(f0_()); | 
|  |  | 
|  | #[cfg(unix)] | 
|  | assert!(f1_()); | 
|  | #[cfg(not(unix))] | 
|  | assert!(!f1_()); | 
|  |  | 
|  | #[cfg(target_pointer_width = "32")] | 
|  | assert!(!f2_()); | 
|  | #[cfg(target_pointer_width = "64")] | 
|  | assert!(f2_()); | 
|  |  | 
|  | #[cfg(not(target_pointer_width = "16"))] | 
|  | assert_eq!(f3_(), 2); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn cfg_select_debug_assertions() { | 
|  | cfg_select! { | 
|  | debug_assertions => { | 
|  | assert!(cfg!(debug_assertions)); | 
|  | assert_eq!(4, 2+2); | 
|  | } | 
|  | _ => { | 
|  | assert!(cfg!(not(debug_assertions))); | 
|  | assert_eq!(10, 5+5); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | #[cfg(target_pointer_width = "64")] | 
|  | #[test] | 
|  | fn cfg_select_no_duplication_on_64() { | 
|  | cfg_select! { | 
|  | windows => { | 
|  | fn foo() {} | 
|  | } | 
|  | unix => { | 
|  | fn foo() {} | 
|  | } | 
|  | target_pointer_width = "64" => { | 
|  | fn foo() {} | 
|  | } | 
|  | } | 
|  | foo(); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn cfg_select_options() { | 
|  | cfg_select! { | 
|  | test => { | 
|  | use core::option::Option as Option2; | 
|  | fn works1() -> Option2<u32> { Some(1) } | 
|  | } | 
|  | _ => { fn works1() -> Option<u32> { None } } | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | feature = "foo" => { fn works2() -> bool { false } } | 
|  | test => { fn works2() -> bool { true } } | 
|  | _ => { fn works2() -> bool { false } } | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | feature = "foo" => { fn works3() -> bool { false } } | 
|  | _ => { fn works3() -> bool { true } } | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | test => { | 
|  | use core::option::Option as Option3; | 
|  | fn works4() -> Option3<u32> { Some(1) } | 
|  | } | 
|  | } | 
|  |  | 
|  | cfg_select! { | 
|  | feature = "foo" => { fn works5() -> bool { false } } | 
|  | test => { fn works5() -> bool { true } } | 
|  | } | 
|  |  | 
|  | assert!(works1().is_some()); | 
|  | assert!(works2()); | 
|  | assert!(works3()); | 
|  | assert!(works4().is_some()); | 
|  | assert!(works5()); | 
|  | } | 
|  |  | 
|  | #[test] | 
|  | fn cfg_select_two_functions() { | 
|  | cfg_select! { | 
|  | target_pointer_width = "64" => { | 
|  | fn foo1() {} | 
|  | fn bar1() {} | 
|  | } | 
|  | _ => { | 
|  | fn foo2() {} | 
|  | fn bar2() {} | 
|  | } | 
|  | } | 
|  |  | 
|  | #[cfg(target_pointer_width = "64")] | 
|  | { | 
|  | foo1(); | 
|  | bar1(); | 
|  | } | 
|  | #[cfg(not(target_pointer_width = "64"))] | 
|  | { | 
|  | foo2(); | 
|  | bar2(); | 
|  | } | 
|  | } | 
|  |  | 
|  | fn _accepts_expressions() -> i32 { | 
|  | cfg_select! { | 
|  | unix => { 1 } | 
|  | _ => { 2 } | 
|  | } | 
|  | } | 
|  |  | 
|  | fn _accepts_only_wildcard() -> i32 { | 
|  | cfg_select! { | 
|  | _ => { 1 } | 
|  | } | 
|  | } | 
|  |  | 
|  | // The current implementation expands to a macro call, which allows the use of expression | 
|  | // statements. | 
|  | fn _allows_stmt_expr_attributes() { | 
|  | let one = 1; | 
|  | let two = 2; | 
|  | cfg_select! { | 
|  | unix => { one * two; } | 
|  | _ => { one + two; } | 
|  | } | 
|  | } | 
|  |  | 
|  | fn _expression() { | 
|  | let _ = cfg_select!( | 
|  | windows => { | 
|  | " XP" | 
|  | } | 
|  | _ => { | 
|  | "" | 
|  | } | 
|  | ); | 
|  | } |