mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			883 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			883 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // run-pass
 | |
| use std::mem::size_of;
 | |
| 
 | |
| #[derive(PartialEq, Debug)]
 | |
| enum Either<T, U> { Left(T), Right(U) }
 | |
| 
 | |
| macro_rules! check {
 | |
|     ($t:ty, $sz:expr, $($e:expr, $s:expr),*) => {{
 | |
|         assert_eq!(size_of::<$t>(), $sz);
 | |
|         $({
 | |
|             static S: $t = $e;
 | |
|             let v: $t = $e;
 | |
|             assert_eq!(S, v);
 | |
|             assert_eq!(format!("{:?}", v), $s);
 | |
|             assert_eq!(format!("{:?}", S), $s);
 | |
|         });*
 | |
|     }}
 | |
| }
 | |
| 
 | |
| pub fn main() {
 | |
|     check!(Option<u8>, 2,
 | |
|            None, "None",
 | |
|            Some(129), "Some(129)");
 | |
|     check!(Option<i16>, 4,
 | |
|            None, "None",
 | |
|            Some(-20000), "Some(-20000)");
 | |
|     check!(Either<u8, i8>, 2,
 | |
|            Either::Left(132), "Left(132)",
 | |
|            Either::Right(-32), "Right(-32)");
 | |
|     check!(Either<u8, i16>, 4,
 | |
|            Either::Left(132), "Left(132)",
 | |
|            Either::Right(-20000), "Right(-20000)");
 | |
| }
 | 
