]> git.lizzy.rs Git - rust.git/blob - src/libcore/benches/mem.rs
6f5afa9ba993f426afc16e4847047a4334425789
[rust.git] / src / libcore / benches / mem.rs
1 // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 use test::Bencher;
12
13 // Completely miscellaneous language-construct benchmarks.
14 // Static/dynamic method dispatch
15
16 struct Struct {
17     field: isize
18 }
19
20 trait Trait {
21     fn method(&self) -> isize;
22 }
23
24 impl Trait for Struct {
25     fn method(&self) -> isize {
26         self.field
27     }
28 }
29
30 #[bench]
31 fn trait_vtable_method_call(b: &mut Bencher) {
32     let s = Struct { field: 10 };
33     let t = &s as &Trait;
34     b.iter(|| {
35         t.method()
36     });
37 }
38
39 #[bench]
40 fn trait_static_method_call(b: &mut Bencher) {
41     let s = Struct { field: 10 };
42     b.iter(|| {
43         s.method()
44     });
45 }
46
47 // Overhead of various match forms
48
49 #[bench]
50 fn match_option_some(b: &mut Bencher) {
51     let x = Some(10);
52     b.iter(|| {
53         match x {
54             Some(y) => y,
55             None => 11
56         }
57     });
58 }
59
60 #[bench]
61 fn match_vec_pattern(b: &mut Bencher) {
62     let x = [1,2,3,4,5,6];
63     b.iter(|| {
64         match x {
65             [1,2,3,..] => 10,
66             _ => 11,
67         }
68     });
69 }