33extern crate test;
44
55use std:: hash:: Hash ;
6- use test:: Bencher ;
6+ use test:: { black_box , Bencher } ;
77
88use hashbrown:: HashMap ;
99//use rustc_hash::FxHashMap as HashMap;
@@ -14,146 +14,137 @@ fn new_map<K: Eq + Hash, V>() -> HashMap<K, V> {
1414}
1515
1616#[ bench]
17- fn new_drop ( b : & mut Bencher ) {
17+ fn insert_i32 ( b : & mut Bencher ) {
1818 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) ;
2124 } )
2225}
2326
2427#[ bench]
25- fn new_insert_drop ( b : & mut Bencher ) {
28+ fn insert_i64 ( b : & mut Bencher ) {
2629 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) ;
3035 } )
3136}
3237
3338#[ 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 ) {
4340 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+ } )
4751}
4852
4953#[ 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 ) {
5955 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+ } )
6366}
6467
6568#[ 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 ( ) ;
6971 for i in 1 ..1001 {
7072 m. insert ( i, i) ;
7173 }
7274
7375 b. iter ( || {
7476 for i in 1 ..1001 {
75- m . contains_key ( & i) ;
77+ black_box ( m . get ( & i) ) ;
7678 }
77- } ) ;
79+ } )
7880}
7981
8082#[ 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) ;
8687 }
8788
8889 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 ) ) ;
9192 }
92- } ) ;
93+ } )
9394}
9495
9596#[ 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 ( ) ;
9999 for i in 1 ..1001 {
100100 m. insert ( i, i) ;
101101 }
102102
103103 b. iter ( || {
104104 for i in 1001 ..2001 {
105- m . contains_key ( & i) ;
105+ black_box ( m . get ( & i) ) ;
106106 }
107- } ) ;
107+ } )
108108}
109109
110110#[ 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 ( ) ;
114113 for i in 1 ..1001 {
115114 m. insert ( i, i) ;
116115 }
117116
118- let mut k = 1 ;
119-
120117 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+ } )
125122}
126123
127124#[ 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 ( ) ;
131127 for i in 1 ..1001 {
132128 m. insert ( i, i) ;
133129 }
134130
135- let mut k = 1 ;
136-
137131 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+ }
143135 } )
144136}
145137
146138#[ 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 ( ) ;
149141 for i in 1 ..1001 {
150- strings . push ( format ! ( "{:x}" , -i ) ) ;
142+ m . insert ( i , i ) ;
151143 }
152144
153- let mut m = new_map ( ) ;
154145 b. iter ( || {
155- for key in & strings {
156- m . insert ( key , key ) ;
146+ for i in & m {
147+ black_box ( i ) ;
157148 }
158149 } )
159150}
0 commit comments