3
3
extern crate test;
4
4
5
5
use std:: hash:: Hash ;
6
- use test:: Bencher ;
6
+ use test:: { black_box , Bencher } ;
7
7
8
8
use hashbrown:: HashMap ;
9
9
//use rustc_hash::FxHashMap as HashMap;
@@ -14,146 +14,137 @@ fn new_map<K: Eq + Hash, V>() -> HashMap<K, V> {
14
14
}
15
15
16
16
#[ bench]
17
- fn new_drop ( b : & mut Bencher ) {
17
+ fn insert_i32 ( b : & mut Bencher ) {
18
18
b. iter ( || {
19
- let m: HashMap < i32 , i32 > = new_map ( ) ;
20
- assert_eq ! ( m. len( ) , 0 ) ;
19
+ let mut m: HashMap < i32 , i32 > = new_map ( ) ;
20
+ for i in 1 ..1001 {
21
+ m. insert ( i, i) ;
22
+ }
23
+ black_box ( m) ;
21
24
} )
22
25
}
23
26
24
27
#[ bench]
25
- fn new_insert_drop ( b : & mut Bencher ) {
28
+ fn insert_i64 ( b : & mut Bencher ) {
26
29
b. iter ( || {
27
- let mut m = new_map ( ) ;
28
- m. insert ( 0 , 0 ) ;
29
- assert_eq ! ( m. len( ) , 1 ) ;
30
+ let mut m: HashMap < i64 , i64 > = new_map ( ) ;
31
+ for i in 1 ..1001 {
32
+ m. insert ( i, i) ;
33
+ }
34
+ black_box ( m) ;
30
35
} )
31
36
}
32
37
33
38
#[ bench]
34
- fn grow_by_insertion ( b : & mut Bencher ) {
35
- let mut m = new_map ( ) ;
36
-
37
- for i in 1 ..1001 {
38
- m. insert ( i, i) ;
39
- }
40
-
41
- let mut k = 1001 ;
42
-
39
+ fn insert_erase_i32 ( b : & mut Bencher ) {
43
40
b. iter ( || {
44
- m. insert ( k, k) ;
45
- k += 1 ;
46
- } ) ;
41
+ let mut m: HashMap < i32 , i32 > = new_map ( ) ;
42
+ for i in 1 ..1001 {
43
+ m. insert ( i, i) ;
44
+ }
45
+ black_box ( & mut m) ;
46
+ for i in 1 ..1001 {
47
+ m. remove ( & i) ;
48
+ }
49
+ black_box ( m) ;
50
+ } )
47
51
}
48
52
49
53
#[ bench]
50
- fn grow_by_insertion_kb ( b : & mut Bencher ) {
51
- let mut m = new_map ( ) ;
52
- let kb = 1024 ;
53
- for i in 1 ..1001 {
54
- m. insert ( i * kb, i) ;
55
- }
56
-
57
- let mut k = 1001 * kb;
58
-
54
+ fn insert_erase_i64 ( b : & mut Bencher ) {
59
55
b. iter ( || {
60
- m. insert ( k, k) ;
61
- k += kb;
62
- } ) ;
56
+ let mut m: HashMap < i64 , i64 > = new_map ( ) ;
57
+ for i in 1 ..1001 {
58
+ m. insert ( i, i) ;
59
+ }
60
+ black_box ( & mut m) ;
61
+ for i in 1 ..1001 {
62
+ m. remove ( & i) ;
63
+ }
64
+ black_box ( m) ;
65
+ } )
63
66
}
64
67
65
68
#[ bench]
66
- fn find_existing ( b : & mut Bencher ) {
67
- let mut m = new_map ( ) ;
68
-
69
+ fn lookup_i32 ( b : & mut Bencher ) {
70
+ let mut m: HashMap < i32 , i32 > = new_map ( ) ;
69
71
for i in 1 ..1001 {
70
72
m. insert ( i, i) ;
71
73
}
72
74
73
75
b. iter ( || {
74
76
for i in 1 ..1001 {
75
- m . contains_key ( & i) ;
77
+ black_box ( m . get ( & i) ) ;
76
78
}
77
- } ) ;
79
+ } )
78
80
}
79
81
80
82
#[ bench]
81
- fn find_existing_high_bits ( b : & mut Bencher ) {
82
- let mut m = new_map ( ) ;
83
-
84
- for i in 1 ..1001_u64 {
85
- m. insert ( i << 32 , i) ;
83
+ fn lookup_i64 ( b : & mut Bencher ) {
84
+ let mut m: HashMap < i64 , i64 > = new_map ( ) ;
85
+ for i in 1 ..1001 {
86
+ m. insert ( i, i) ;
86
87
}
87
88
88
89
b. iter ( || {
89
- for i in 1 ..1001_u64 {
90
- m . contains_key ( & ( i << 32 ) ) ;
90
+ for i in 1 ..1001 {
91
+ black_box ( m . get ( & i ) ) ;
91
92
}
92
- } ) ;
93
+ } )
93
94
}
94
95
95
96
#[ bench]
96
- fn find_nonexisting ( b : & mut Bencher ) {
97
- let mut m = new_map ( ) ;
98
-
97
+ fn lookup_fail_i32 ( b : & mut Bencher ) {
98
+ let mut m: HashMap < i32 , i32 > = new_map ( ) ;
99
99
for i in 1 ..1001 {
100
100
m. insert ( i, i) ;
101
101
}
102
102
103
103
b. iter ( || {
104
104
for i in 1001 ..2001 {
105
- m . contains_key ( & i) ;
105
+ black_box ( m . get ( & i) ) ;
106
106
}
107
- } ) ;
107
+ } )
108
108
}
109
109
110
110
#[ bench]
111
- fn hashmap_as_queue ( b : & mut Bencher ) {
112
- let mut m = new_map ( ) ;
113
-
111
+ fn lookup_fail_i64 ( b : & mut Bencher ) {
112
+ let mut m: HashMap < i64 , i64 > = new_map ( ) ;
114
113
for i in 1 ..1001 {
115
114
m. insert ( i, i) ;
116
115
}
117
116
118
- let mut k = 1 ;
119
-
120
117
b. iter ( || {
121
- m . remove ( & k ) ;
122
- m . insert ( k + 1000 , k + 1000 ) ;
123
- k += 1 ;
124
- } ) ;
118
+ for i in 1001 .. 2001 {
119
+ black_box ( m . get ( & i ) ) ;
120
+ }
121
+ } )
125
122
}
126
123
127
124
#[ bench]
128
- fn get_remove_insert ( b : & mut Bencher ) {
129
- let mut m = new_map ( ) ;
130
-
125
+ fn iter_i32 ( b : & mut Bencher ) {
126
+ let mut m: HashMap < i32 , i32 > = new_map ( ) ;
131
127
for i in 1 ..1001 {
132
128
m. insert ( i, i) ;
133
129
}
134
130
135
- let mut k = 1 ;
136
-
137
131
b. iter ( || {
138
- m. get ( & ( k + 400 ) ) ;
139
- m. get ( & ( k + 2000 ) ) ;
140
- m. remove ( & k) ;
141
- m. insert ( k + 1000 , k + 1000 ) ;
142
- k += 1 ;
132
+ for i in & m {
133
+ black_box ( i) ;
134
+ }
143
135
} )
144
136
}
145
137
146
138
#[ bench]
147
- fn insert_8_char_string ( b : & mut Bencher ) {
148
- let mut strings : Vec < _ > = Vec :: new ( ) ;
139
+ fn iter_i64 ( b : & mut Bencher ) {
140
+ let mut m : HashMap < i64 , i64 > = new_map ( ) ;
149
141
for i in 1 ..1001 {
150
- strings . push ( format ! ( "{:x}" , -i ) ) ;
142
+ m . insert ( i , i ) ;
151
143
}
152
144
153
- let mut m = new_map ( ) ;
154
145
b. iter ( || {
155
- for key in & strings {
156
- m . insert ( key , key ) ;
146
+ for i in & m {
147
+ black_box ( i ) ;
157
148
}
158
149
} )
159
150
}
0 commit comments