mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			866 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			866 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![feature(test)]
 | |
| 
 | |
| extern crate test;
 | |
| 
 | |
| use test::Bencher;
 | |
| 
 | |
| // Static/dynamic method dispatch
 | |
| 
 | |
| struct Struct {
 | |
|     field: isize,
 | |
| }
 | |
| 
 | |
| trait Trait {
 | |
|     fn method(&self) -> isize;
 | |
| }
 | |
| 
 | |
| impl Trait for Struct {
 | |
|     fn method(&self) -> isize {
 | |
|         self.field
 | |
|     }
 | |
| }
 | |
| 
 | |
| #[bench]
 | |
| fn trait_vtable_method_call(b: &mut Bencher) {
 | |
|     let s = Struct { field: 10 };
 | |
|     let t = &s as &dyn Trait;
 | |
|     b.iter(|| t.method());
 | |
| }
 | |
| 
 | |
| #[bench]
 | |
| fn trait_static_method_call(b: &mut Bencher) {
 | |
|     let s = Struct { field: 10 };
 | |
|     b.iter(|| s.method());
 | |
| }
 | |
| 
 | |
| // Overhead of various match forms
 | |
| 
 | |
| #[bench]
 | |
| fn option_some(b: &mut Bencher) {
 | |
|     let x = Some(10);
 | |
|     b.iter(|| match x {
 | |
|         Some(y) => y,
 | |
|         None => 11,
 | |
|     });
 | |
| }
 | |
| 
 | |
| #[bench]
 | |
| fn vec_pattern(b: &mut Bencher) {
 | |
|     let x = [1, 2, 3, 4, 5, 6];
 | |
|     b.iter(|| match x {
 | |
|         [1, 2, 3, ..] => 10,
 | |
|         _ => 11,
 | |
|     });
 | |
| }
 | 
