mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			222 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
#![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"
 | 
						|
        }
 | 
						|
        _ => {
 | 
						|
            ""
 | 
						|
        }
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
#[deny(non_exhaustive_omitted_patterns)]
 | 
						|
fn _matches_does_not_trigger_non_exhaustive_omitted_patterns_lint(o: core::sync::atomic::Ordering) {
 | 
						|
    // Ordering is a #[non_exhaustive] enum from a separate crate
 | 
						|
    let _m = matches!(o, core::sync::atomic::Ordering::Relaxed);
 | 
						|
}
 |