mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![feature(core_intrinsics)]
 | |
| 
 | |
| use std::io::Write;
 | |
| use std::intrinsics;
 | |
| 
 | |
| 
 | |
| fn main() {
 | |
|     let _ = ::std::iter::repeat('a' as u8).take(10).collect::<Vec<_>>();
 | |
|     let stderr = ::std::io::stderr();
 | |
|     let mut stderr = stderr.lock();
 | |
| 
 | |
|     writeln!(stderr, "some {} text", "<unknown>").unwrap();
 | |
| 
 | |
|     let _ = std::process::Command::new("true").env("c", "d").spawn();
 | |
| 
 | |
|     println!("cargo:rustc-link-lib=z");
 | |
| 
 | |
|     static ONCE: std::sync::Once = std::sync::ONCE_INIT;
 | |
|     ONCE.call_once(|| {});
 | |
| 
 | |
|     LoopState::Continue(()) == LoopState::Break(());
 | |
| 
 | |
|     // Make sure ByValPair values with differently sized components are correctly passed
 | |
|     map(None::<(u8, Box<Instruction>)>);
 | |
| 
 | |
|     println!("{}", 2.3f32.exp());
 | |
|     println!("{}", 2.3f32.exp2());
 | |
|     println!("{}", 2.3f32.abs());
 | |
|     println!("{}", 2.3f32.sqrt());
 | |
|     println!("{}", 2.3f32.floor());
 | |
|     println!("{}", 2.3f32.ceil());
 | |
|     println!("{}", 2.3f32.min(1.0));
 | |
|     println!("{}", 2.3f32.max(1.0));
 | |
|     println!("{}", 2.3f32.powi(2));
 | |
| 
 | |
|     assert_eq!(0b0000000000000000000000000010000010000000000000000000000000000000_0000000000100000000000000000000000001000000000000100000000000000u128.leading_zeros(), 26);
 | |
|     assert_eq!(0b0000000000000000000000000010000000000000000000000000000000000000_0000000000000000000000000000000000001000000000000000000010000000u128.trailing_zeros(), 7);
 | |
| 
 | |
|     0i128.checked_div(2i128);
 | |
|     0u128.checked_div(2u128);
 | |
|     assert_eq!(1u128 + 2, 3);
 | |
| 
 | |
|     assert_eq!(0b100010000000000000000000000000000u128 >> 10, 0b10001000000000000000000u128);
 | |
|     assert_eq!(0xFEDCBA987654321123456789ABCDEFu128 >> 64, 0xFEDCBA98765432u128);
 | |
|     assert_eq!(0xFEDCBA987654321123456789ABCDEFu128 as i128 >> 64, 0xFEDCBA98765432i128);
 | |
|     assert_eq!(353985398u128 * 932490u128, 330087843781020u128);
 | |
| 
 | |
|     unsafe {
 | |
|         test_simd();
 | |
|     }
 | |
| }
 | |
| 
 | |
| #[target_feature(enable = "sse2")]
 | |
| unsafe fn test_simd() {
 | |
|     use std::arch::x86_64::*;
 | |
| 
 | |
|     let x = _mm_setzero_si128();
 | |
|     let y = _mm_set1_epi16(7);
 | |
|     let or = _mm_or_si128(x, y);
 | |
| 
 | |
|     assert_eq!(std::mem::transmute::<_, [u16; 8]>(or), [7, 7, 7, 7, 7, 7, 7, 7]);
 | |
| }
 | |
| 
 | |
| #[derive(PartialEq)]
 | |
| enum LoopState {
 | |
|     Continue(()),
 | |
|     Break(())
 | |
| }
 | |
| 
 | |
| pub enum Instruction {
 | |
|     Increment,
 | |
|     Loop,
 | |
| }
 | |
| 
 | |
| fn map(a: Option<(u8, Box<Instruction>)>) -> Option<Box<Instruction>> {
 | |
|     match a {
 | |
|         None => None,
 | |
|         Some((_, instr)) => Some(instr),
 | |
|     }
 | |
| }
 | 
