summaryrefslogtreecommitdiffstats
path: root/library/core/tests/macros.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/core/tests/macros.rs')
-rw-r--r--library/core/tests/macros.rs154
1 files changed, 154 insertions, 0 deletions
diff --git a/library/core/tests/macros.rs b/library/core/tests/macros.rs
index ff3632e35..eb886def1 100644
--- a/library/core/tests/macros.rs
+++ b/library/core/tests/macros.rs
@@ -1,3 +1,25 @@
+trait Trait {
+ fn blah(&self);
+}
+
+#[allow(dead_code)]
+struct Struct;
+
+impl Trait for Struct {
+ cfg_match! {
+ cfg(feature = "blah") => {
+ fn blah(&self) {
+ unimplemented!();
+ }
+ }
+ _ => {
+ fn blah(&self) {
+ unimplemented!();
+ }
+ }
+ }
+}
+
#[test]
fn assert_eq_trailing_comma() {
assert_eq!(1, 1,);
@@ -18,3 +40,135 @@ fn assert_ne_trailing_comma() {
fn matches_leading_pipe() {
matches!(1, | 1 | 2 | 3);
}
+
+#[test]
+fn cfg_match_basic() {
+ cfg_match! {
+ cfg(target_pointer_width = "64") => { fn f0_() -> bool { true }}
+ }
+
+ cfg_match! {
+ cfg(unix) => { fn f1_() -> bool { true }}
+ cfg(any(target_os = "macos", target_os = "linux")) => { fn f1_() -> bool { false }}
+ }
+
+ cfg_match! {
+ cfg(target_pointer_width = "32") => { fn f2_() -> bool { false }}
+ cfg(target_pointer_width = "64") => { fn f2_() -> bool { true }}
+ }
+
+ cfg_match! {
+ cfg(target_pointer_width = "16") => { fn f3_() -> i32 { 1 }}
+ _ => { fn f3_() -> i32 { 2 }}
+ }
+
+ #[cfg(target_pointer_width = "64")]
+ assert!(f0_());
+
+ #[cfg(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_match_debug_assertions() {
+ cfg_match! {
+ cfg(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_match_no_duplication_on_64() {
+ cfg_match! {
+ cfg(windows) => {
+ fn foo() {}
+ }
+ cfg(unix) => {
+ fn foo() {}
+ }
+ cfg(target_pointer_width = "64") => {
+ fn foo() {}
+ }
+ }
+ foo();
+}
+
+#[test]
+fn cfg_match_options() {
+ cfg_match! {
+ cfg(test) => {
+ use core::option::Option as Option2;
+ fn works1() -> Option2<u32> { Some(1) }
+ }
+ _ => { fn works1() -> Option<u32> { None } }
+ }
+
+ cfg_match! {
+ cfg(feature = "foo") => { fn works2() -> bool { false } }
+ cfg(test) => { fn works2() -> bool { true } }
+ _ => { fn works2() -> bool { false } }
+ }
+
+ cfg_match! {
+ cfg(feature = "foo") => { fn works3() -> bool { false } }
+ _ => { fn works3() -> bool { true } }
+ }
+
+ cfg_match! {
+ cfg(test) => {
+ use core::option::Option as Option3;
+ fn works4() -> Option3<u32> { Some(1) }
+ }
+ }
+
+ cfg_match! {
+ cfg(feature = "foo") => { fn works5() -> bool { false } }
+ cfg(test) => { fn works5() -> bool { true } }
+ }
+
+ assert!(works1().is_some());
+ assert!(works2());
+ assert!(works3());
+ assert!(works4().is_some());
+ assert!(works5());
+}
+
+#[test]
+fn cfg_match_two_functions() {
+ cfg_match! {
+ cfg(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();
+ }
+}