mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			288 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			288 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
// run-pass
 | 
						||
 | 
						||
#![feature(coroutines)]
 | 
						||
 | 
						||
#![allow(non_camel_case_types)]
 | 
						||
#![allow(dead_code)]
 | 
						||
#![allow(redundant_semicolons)]
 | 
						||
#![allow(unreachable_code)]
 | 
						||
#![allow(unused_braces, unused_must_use, unused_parens)]
 | 
						||
#![allow(uncommon_codepoints, confusable_idents)]
 | 
						||
#![allow(unused_imports)]
 | 
						||
#![allow(unreachable_patterns)]
 | 
						||
 | 
						||
#![recursion_limit = "256"]
 | 
						||
 | 
						||
extern crate core;
 | 
						||
use std::cell::Cell;
 | 
						||
use std::mem::swap;
 | 
						||
use std::ops::Deref;
 | 
						||
 | 
						||
// Just a grab bag of stuff that you wouldn't want to actually write.
 | 
						||
 | 
						||
fn strange() -> bool { let _x: bool = return true; }
 | 
						||
 | 
						||
fn funny() {
 | 
						||
    fn f(_x: ()) { }
 | 
						||
    f(return);
 | 
						||
}
 | 
						||
 | 
						||
fn what() {
 | 
						||
    fn the(x: &Cell<bool>) {
 | 
						||
        return while !x.get() { x.set(true); };
 | 
						||
    }
 | 
						||
    let i = &Cell::new(false);
 | 
						||
    let dont = {||the(i)};
 | 
						||
    dont();
 | 
						||
    assert!((i.get()));
 | 
						||
}
 | 
						||
 | 
						||
fn zombiejesus() {
 | 
						||
    loop {
 | 
						||
        while (return) {
 | 
						||
            if (return) {
 | 
						||
                match (return) {
 | 
						||
                    1 => {
 | 
						||
                        if (return) {
 | 
						||
                            return
 | 
						||
                        } else {
 | 
						||
                            return
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    _ => { return }
 | 
						||
                };
 | 
						||
            } else if (return) {
 | 
						||
                return;
 | 
						||
            }
 | 
						||
        }
 | 
						||
        if (return) { break; }
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
fn notsure() {
 | 
						||
    let mut _x: isize;
 | 
						||
    let mut _y = (_x = 0) == (_x = 0);
 | 
						||
    let mut _z = (_x = 0) < (_x = 0);
 | 
						||
    let _a = (_x += 0) == (_x = 0);
 | 
						||
    let _b = swap(&mut _y, &mut _z) == swap(&mut _y, &mut _z);
 | 
						||
}
 | 
						||
 | 
						||
fn canttouchthis() -> usize {
 | 
						||
    fn p() -> bool { true }
 | 
						||
    let _a = (assert!((true)) == (assert!(p())));
 | 
						||
    let _c = (assert!((p())) == ());
 | 
						||
    let _b: bool = (println!("{}", 0) == (return 0));
 | 
						||
}
 | 
						||
 | 
						||
fn angrydome() {
 | 
						||
    loop { if break { } }
 | 
						||
    let mut i = 0;
 | 
						||
    loop { i += 1; if i == 1 { match (continue) { 1 => { }, _ => panic!("wat") } }
 | 
						||
      break; }
 | 
						||
}
 | 
						||
 | 
						||
fn evil_lincoln() { let _evil: () = println!("lincoln"); }
 | 
						||
 | 
						||
fn dots() {
 | 
						||
    assert_eq!(String::from(".................................................."),
 | 
						||
               format!("{:?}", .. .. .. .. .. .. .. .. .. .. .. .. ..
 | 
						||
                               .. .. .. .. .. .. .. .. .. .. .. ..));
 | 
						||
}
 | 
						||
 | 
						||
fn u8(u8: u8) {
 | 
						||
    if u8 != 0u8 {
 | 
						||
        assert_eq!(8u8, {
 | 
						||
            macro_rules! u8 {
 | 
						||
                (u8) => {
 | 
						||
                    mod u8 {
 | 
						||
                        pub fn u8<'u8: 'u8 + 'u8>(u8: &'u8 u8) -> &'u8 u8 {
 | 
						||
                            "u8";
 | 
						||
                            u8
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                };
 | 
						||
            }
 | 
						||
 | 
						||
            u8!(u8);
 | 
						||
            let &u8: &u8 = u8::u8(&8u8);
 | 
						||
            ::u8(0u8);
 | 
						||
            u8
 | 
						||
        });
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
fn fishy() {
 | 
						||
    assert_eq!(String::from("><>"),
 | 
						||
               String::<>::from::<>("><>").chars::<>().rev::<>().collect::<String>());
 | 
						||
}
 | 
						||
 | 
						||
fn union() {
 | 
						||
    union union<'union> { union: &'union union<'union>, }
 | 
						||
}
 | 
						||
 | 
						||
fn special_characters() {
 | 
						||
    let val = !((|(..):(_,_),(|__@_|__)|__)((&*"\\",'🤔')/**/,{})=={&[..=..][..];})//
 | 
						||
    ;
 | 
						||
    assert!(!val);
 | 
						||
}
 | 
						||
 | 
						||
fn punch_card() -> impl std::fmt::Debug {
 | 
						||
    ..=..=.. ..    .. .. .. ..    .. .. .. ..    .. ..=.. ..
 | 
						||
    ..=.. ..=..    .. .. .. ..    .. .. .. ..    ..=..=..=..
 | 
						||
    ..=.. ..=..    ..=.. ..=..    .. ..=..=..    .. ..=.. ..
 | 
						||
    ..=..=.. ..    ..=.. ..=..    ..=.. .. ..    .. ..=.. ..
 | 
						||
    ..=.. ..=..    ..=.. ..=..    .. ..=.. ..    .. ..=.. ..
 | 
						||
    ..=.. ..=..    ..=.. ..=..    .. .. ..=..    .. ..=.. ..
 | 
						||
    ..=.. ..=..    .. ..=..=..    ..=..=.. ..    .. ..=.. ..
 | 
						||
}
 | 
						||
 | 
						||
fn r#match() {
 | 
						||
    let val: () = match match match match match () {
 | 
						||
        () => ()
 | 
						||
    } {
 | 
						||
        () => ()
 | 
						||
    } {
 | 
						||
        () => ()
 | 
						||
    } {
 | 
						||
        () => ()
 | 
						||
    } {
 | 
						||
        () => ()
 | 
						||
    };
 | 
						||
    assert_eq!(val, ());
 | 
						||
}
 | 
						||
 | 
						||
fn i_yield() {
 | 
						||
    static || {
 | 
						||
        yield yield yield yield yield yield yield yield yield;
 | 
						||
    };
 | 
						||
}
 | 
						||
 | 
						||
fn match_nested_if() {
 | 
						||
    let val = match () {
 | 
						||
        () if if if if true {true} else {false} {true} else {false} {true} else {false} => true,
 | 
						||
        _ => false,
 | 
						||
    };
 | 
						||
    assert!(val);
 | 
						||
}
 | 
						||
 | 
						||
fn monkey_barrel() {
 | 
						||
    let val: () = ()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=()=();
 | 
						||
    assert_eq!(val, ());
 | 
						||
}
 | 
						||
 | 
						||
fn 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎() {
 | 
						||
    type 𝚕𝚘𝚘𝚙 = i32;
 | 
						||
    fn 𝚋𝚛𝚎𝚊𝚔() -> 𝚕𝚘𝚘𝚙 {
 | 
						||
        let 𝚛𝚎𝚝𝚞𝚛𝚗 = 42;
 | 
						||
        return 𝚛𝚎𝚝𝚞𝚛𝚗;
 | 
						||
    }
 | 
						||
    assert_eq!(loop {
 | 
						||
        break 𝚋𝚛𝚎𝚊𝚔 ();
 | 
						||
    }, 42);
 | 
						||
}
 | 
						||
 | 
						||
fn function() {
 | 
						||
    struct foo;
 | 
						||
    impl Deref for foo {
 | 
						||
        type Target = fn() -> Self;
 | 
						||
        fn deref(&self) -> &Self::Target {
 | 
						||
            &((|| foo) as _)
 | 
						||
        }
 | 
						||
    }
 | 
						||
    let foo = foo () ()() ()()() ()()()() ()()()()();
 | 
						||
}
 | 
						||
 | 
						||
fn bathroom_stall() {
 | 
						||
    let mut i = 1;
 | 
						||
    matches!(2, _|_|_|_|_|_ if (i+=1) != (i+=1));
 | 
						||
    assert_eq!(i, 13);
 | 
						||
}
 | 
						||
 | 
						||
fn closure_matching() {
 | 
						||
    let x = |_| Some(1);
 | 
						||
    let (|x| x) = match x(..) {
 | 
						||
        |_| Some(2) => |_| Some(3),
 | 
						||
        |_| _ => unreachable!(),
 | 
						||
    };
 | 
						||
    assert!(matches!(x(..), |_| Some(4)));
 | 
						||
}
 | 
						||
 | 
						||
fn semisemisemisemisemi() {
 | 
						||
    ;;;;;;; ;;;;;;; ;;;    ;;; ;;
 | 
						||
    ;;      ;;      ;;;;  ;;;; ;;
 | 
						||
    ;;;;;;; ;;;;;   ;; ;;;; ;; ;;
 | 
						||
         ;; ;;      ;;  ;;  ;; ;;
 | 
						||
    ;;;;;;; ;;;;;;; ;;      ;; ;;
 | 
						||
}
 | 
						||
 | 
						||
fn useful_syntax() {
 | 
						||
    use {{std::{{collections::{{HashMap}}}}}};
 | 
						||
    use ::{{{{core}, {std}}}};
 | 
						||
    use {{::{{core as core2}}}};
 | 
						||
}
 | 
						||
 | 
						||
fn infcx() {
 | 
						||
    pub mod cx {
 | 
						||
        pub mod cx {
 | 
						||
            pub use super::cx;
 | 
						||
            pub struct Cx;
 | 
						||
        }
 | 
						||
    }
 | 
						||
    let _cx: cx::cx::Cx = cx::cx::cx::cx::cx::Cx;
 | 
						||
}
 | 
						||
 | 
						||
fn return_already() -> impl std::fmt::Debug {
 | 
						||
    loop {
 | 
						||
        return !!!!!!!
 | 
						||
        break !!!!!!1111
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
fn fake_macros() -> impl std::fmt::Debug {
 | 
						||
    loop {
 | 
						||
        if! {
 | 
						||
            match! (
 | 
						||
                break! {
 | 
						||
                    return! {
 | 
						||
                        1337
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            )
 | 
						||
 | 
						||
            {}
 | 
						||
        }
 | 
						||
 | 
						||
        {}
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
pub fn main() {
 | 
						||
    strange();
 | 
						||
    funny();
 | 
						||
    what();
 | 
						||
    zombiejesus();
 | 
						||
    notsure();
 | 
						||
    canttouchthis();
 | 
						||
    angrydome();
 | 
						||
    evil_lincoln();
 | 
						||
    dots();
 | 
						||
    u8(8u8);
 | 
						||
    fishy();
 | 
						||
    union();
 | 
						||
    special_characters();
 | 
						||
    punch_card();
 | 
						||
    r#match();
 | 
						||
    i_yield();
 | 
						||
    match_nested_if();
 | 
						||
    monkey_barrel();
 | 
						||
    𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎();
 | 
						||
    function();
 | 
						||
    bathroom_stall();
 | 
						||
    closure_matching();
 | 
						||
    semisemisemisemisemi();
 | 
						||
    useful_syntax();
 | 
						||
    infcx();
 | 
						||
    return_already();
 | 
						||
    fake_macros();
 | 
						||
}
 |