@@ -6,7 +6,6 @@ extern crate fnv;
6
6
extern crate lazy_static;
7
7
extern crate hashmap2;
8
8
9
-
10
9
macro_rules! bench_mod {
11
10
( $modname: ident, $hashmap: ident) => {
12
11
mod $modname {
@@ -43,7 +42,7 @@ macro_rules! bench_mod {
43
42
b. iter( || {
44
43
let mut map = $hashmap:: with_capacity( c) ;
45
44
for x in 0 ..c {
46
- map. insert( x, ( ) ) ;
45
+ map. insert( x, x ) ;
47
46
}
48
47
map
49
48
} ) ;
@@ -52,10 +51,11 @@ macro_rules! bench_mod {
52
51
#[ bench]
53
52
fn insert_string_10_000( b: & mut Bencher ) {
54
53
let c = 10_000usize ;
54
+ let ss = Vec :: from_iter( ( 0 ..c) . map( |x| x. to_string( ) ) ) ;
55
55
b. iter( || {
56
56
let mut map = $hashmap:: with_capacity( c) ;
57
- for x in 0 ..c {
58
- map. insert( x . to_string ( ) , ( ) ) ;
57
+ for key in & ss {
58
+ map. insert( key . clone ( ) , 0usize ) ;
59
59
}
60
60
map
61
61
} ) ;
@@ -68,7 +68,7 @@ macro_rules! bench_mod {
68
68
b. iter( || {
69
69
let mut map = $hashmap:: with_capacity( c) ;
70
70
for key in & ss {
71
- map. insert( & key[ ..] , ( ) ) ;
71
+ map. insert( & key[ ..] , 0usize ) ;
72
72
}
73
73
map
74
74
} ) ;
@@ -94,7 +94,7 @@ macro_rules! bench_mod {
94
94
b. iter( || {
95
95
let mut map = $hashmap:: with_capacity( c) ;
96
96
for x in 0 ..c {
97
- map. insert( x, ( ) ) ;
97
+ map. insert( x, x ) ;
98
98
}
99
99
map
100
100
} ) ;
@@ -106,7 +106,7 @@ macro_rules! bench_mod {
106
106
b. iter( || {
107
107
let mut map = $hashmap:: with_capacity( c) ;
108
108
for x in 0 ..c {
109
- map. insert( x, ( ) ) ;
109
+ map. insert( x, x ) ;
110
110
}
111
111
map
112
112
} ) ;
@@ -118,7 +118,7 @@ macro_rules! bench_mod {
118
118
b. iter( || {
119
119
let mut map = $hashmap:: with_capacity( c) ;
120
120
for x in 0 ..c {
121
- map. insert( x, ( ) ) ;
121
+ map. insert( x, x ) ;
122
122
}
123
123
map
124
124
} ) ;
@@ -130,7 +130,7 @@ macro_rules! bench_mod {
130
130
let mut map = $hashmap:: with_capacity( c) ;
131
131
let len = c - c/10 ;
132
132
for x in 0 ..len {
133
- map. insert( x, ( ) ) ;
133
+ map. insert( x, x ) ;
134
134
}
135
135
assert_eq!( map. len( ) , len) ;
136
136
b. iter( || {
@@ -157,15 +157,15 @@ macro_rules! bench_mod {
157
157
}
158
158
b. iter( || {
159
159
let mut found = 0 ;
160
- for key in 5000 ..c {
161
- found += map. get( & key) . is_some ( ) as i32 ;
160
+ for key in 0 .. 5000 {
161
+ found += * map. get( & key) . unwrap ( ) ;
162
162
}
163
163
found
164
164
} ) ;
165
165
}
166
166
167
167
#[ bench]
168
- fn lookup_hashmap_10_000_noexist ( b: & mut Bencher ) {
168
+ fn lookup_10_000_noexist ( b: & mut Bencher ) {
169
169
let c = 10_000usize ;
170
170
let mut map = HashMap :: with_capacity( c) ;
171
171
let keys = shuffled_keys( 0 ..c) ;
@@ -174,29 +174,89 @@ macro_rules! bench_mod {
174
174
}
175
175
b. iter( || {
176
176
let mut found = 0 ;
177
- for key in c..15000 {
178
- found += map. get( & key) . is_some ( ) as i32 ;
177
+ for key in c..c+ 5000 {
178
+ found += map. get( & key) . is_none ( ) as u32 ;
179
179
}
180
180
found
181
181
} ) ;
182
182
}
183
183
184
184
185
185
// number of items to look up
186
- const LOOKUP_MAP_SIZE : usize = 100_000_usize ;
187
186
const LOOKUP_SAMPLE_SIZE : usize = 5000 ;
188
187
189
188
190
189
lazy_static! {
190
+ static ref HMAP_10K : $hashmap<usize , usize > = {
191
+ let c = 10_000_usize ;
192
+ let mut map = $hashmap:: with_capacity( c as usize ) ;
193
+ let keys = shuffled_keys( 0 ..c) ;
194
+ for & key in & keys {
195
+ map. insert( key, key) ;
196
+ }
197
+ map
198
+ } ;
199
+
191
200
static ref HMAP_100K : $hashmap<usize , usize > = {
192
- let c = LOOKUP_MAP_SIZE ;
201
+ let c = 100_000_usize ;
202
+ let mut map = $hashmap:: with_capacity( c as usize ) ;
203
+ let keys = shuffled_keys( 0 ..c) ;
204
+ for & key in & keys {
205
+ map. insert( key, key) ;
206
+ }
207
+ map
208
+ } ;
209
+
210
+ static ref HMAP_1M : $hashmap<usize , usize > = {
211
+ let c = 1_000_000usize ;
193
212
let mut map = $hashmap:: with_capacity( c as usize ) ;
194
213
let keys = shuffled_keys( 0 ..c) ;
195
214
for & key in & keys {
196
215
map. insert( key, key) ;
197
216
}
198
217
map
199
218
} ;
219
+
220
+ static ref HMAP_10K_BIG : $hashmap<usize , [ u64 ; 10 ] > = {
221
+ let c = 10_000_usize ;
222
+ let mut map = $hashmap:: with_capacity( c as usize ) ;
223
+ let keys = shuffled_keys( 0 ..c) ;
224
+ for & key in & keys {
225
+ map. insert( key, [ 0u64 ; 10 ] ) ;
226
+ }
227
+ map
228
+ } ;
229
+ static ref HMAP_100K_BIG : $hashmap<usize , [ u64 ; 10 ] > = {
230
+ let c = 100_000_usize ;
231
+ let mut map = $hashmap:: with_capacity( c as usize ) ;
232
+ let keys = shuffled_keys( 0 ..c) ;
233
+ for & key in & keys {
234
+ map. insert( key, [ 0u64 ; 10 ] ) ;
235
+ }
236
+ map
237
+ } ;
238
+
239
+ static ref HMAP_1M_BIG : $hashmap<usize , [ u64 ; 10 ] > = {
240
+ let c = 1_000_000_usize ;
241
+ let mut map = $hashmap:: with_capacity( c as usize ) ;
242
+ let keys = shuffled_keys( 0 ..c) ;
243
+ for & key in & keys {
244
+ map. insert( key, [ 0u64 ; 10 ] ) ;
245
+ }
246
+ map
247
+ } ;
248
+ }
249
+
250
+ #[ bench]
251
+ fn lookup_10_000_multi( b: & mut Bencher ) {
252
+ let map = & * HMAP_10K ;
253
+ b. iter( || {
254
+ let mut found = 0 ;
255
+ for key in 0 ..LOOKUP_SAMPLE_SIZE {
256
+ found += * map. get( & key) . unwrap( ) ;
257
+ }
258
+ found
259
+ } ) ;
200
260
}
201
261
202
262
#[ bench]
@@ -205,42 +265,59 @@ macro_rules! bench_mod {
205
265
b. iter( || {
206
266
let mut found = 0 ;
207
267
for key in 0 ..LOOKUP_SAMPLE_SIZE {
208
- found += map. get( & key) . is_some ( ) as u32 ;
268
+ found += * map. get( & key) . unwrap ( ) ;
209
269
}
210
270
found
211
271
} ) ;
212
272
}
213
273
214
274
#[ bench]
215
- fn lookup_100_000_multi_10p ( b: & mut Bencher ) {
216
- let map = & * HMAP_100K ;
275
+ fn lookup_1_000_000_multi ( b: & mut Bencher ) {
276
+ let map = & * HMAP_1M ;
217
277
b. iter( || {
218
278
let mut found = 0 ;
219
- for key in 0 ..LOOKUP_SAMPLE_SIZE / 10 {
220
- found += map. get( & key) . is_some ( ) as u32 ;
279
+ for key in 0 ..LOOKUP_SAMPLE_SIZE {
280
+ found += * map. get( & key) . unwrap ( ) ;
221
281
}
222
282
found
223
283
} ) ;
224
284
}
225
285
226
286
287
+
227
288
#[ bench]
228
- fn lookup_100_000_single( b: & mut Bencher ) {
229
- let map = & * HMAP_100K ;
230
- let mut iter = ( 0 ..LOOKUP_MAP_SIZE + LOOKUP_SAMPLE_SIZE ) . cycle( ) ;
289
+ fn lookup_10_000_multi_bigvalue( b: & mut Bencher ) {
290
+ let map = & * HMAP_10K_BIG ;
231
291
b. iter( || {
232
- let key = iter. next( ) . unwrap( ) ;
233
- map. get( & key) . is_some( )
292
+ let mut found = 0 ;
293
+ for key in 0 ..LOOKUP_SAMPLE_SIZE {
294
+ found += map. get( & key) . unwrap( ) [ 0 ] ;
295
+ }
296
+ found
234
297
} ) ;
235
298
}
236
299
237
300
#[ bench]
238
- fn lookup_100_000_single_10p( b: & mut Bencher ) {
239
- let map = & * HMAP_100K ;
240
- let mut iter = ( 0 ..LOOKUP_MAP_SIZE / 10 ) . cycle( ) ;
301
+ fn lookup_100_000_multi_bigvalue( b: & mut Bencher ) {
302
+ let map = & * HMAP_100K_BIG ;
241
303
b. iter( || {
242
- let key = iter. next( ) . unwrap( ) ;
243
- map. get( & key) . is_some( )
304
+ let mut found = 0 ;
305
+ for key in 0 ..LOOKUP_SAMPLE_SIZE {
306
+ found += map. get( & key) . unwrap( ) [ 0 ] ;
307
+ }
308
+ found
309
+ } ) ;
310
+ }
311
+
312
+ #[ bench]
313
+ fn lookup_1_000_000_multi_bigvalue( b: & mut Bencher ) {
314
+ let map = & * HMAP_1M_BIG ;
315
+ b. iter( || {
316
+ let mut found = 0 ;
317
+ for key in 0 ..LOOKUP_SAMPLE_SIZE {
318
+ found += map. get( & key) . unwrap( ) [ 0 ] ;
319
+ }
320
+ found
244
321
} ) ;
245
322
}
246
323
@@ -251,7 +328,7 @@ macro_rules! bench_mod {
251
328
b. iter( || {
252
329
let mut map = $hashmap:: new( ) ;
253
330
for x in 0 ..c {
254
- map. insert( x, ( ) ) ;
331
+ map. insert( x, x ) ;
255
332
}
256
333
map
257
334
} ) ;
@@ -263,7 +340,7 @@ macro_rules! bench_mod {
263
340
b. iter( || {
264
341
let mut map: $hashmap<_, _, FnvBuilder > = $hashmap:: default ( ) ;
265
342
for x in 0 ..c {
266
- map. insert( x, ( ) ) ;
343
+ map. insert( x, x ) ;
267
344
}
268
345
map
269
346
} ) ;
@@ -272,8 +349,8 @@ macro_rules! bench_mod {
272
349
const MERGE : usize = 10_000usize ;
273
350
#[ bench]
274
351
fn merge_simple( b: & mut Bencher ) {
275
- let first_map: $hashmap<usize , _ > = ( 0 ..MERGE ) . map( |i| ( i, ( ) ) ) . collect( ) ;
276
- let second_map: $hashmap<usize , _ > = ( MERGE ..MERGE * 2 ) . map( |i| ( i, ( ) ) ) . collect( ) ;
352
+ let first_map: $hashmap<usize , usize > = ( 0 ..MERGE ) . map( |i| ( i, i ) ) . collect( ) ;
353
+ let second_map: $hashmap<usize , usize > = ( MERGE ..MERGE * 2 ) . map( |i| ( i, i ) ) . collect( ) ;
277
354
b. iter( || {
278
355
let mut merged = first_map. clone( ) ;
279
356
merged. extend( second_map. iter( ) . map( |( & k, & v) | ( k, v) ) ) ;
@@ -283,8 +360,8 @@ macro_rules! bench_mod {
283
360
284
361
#[ bench]
285
362
fn merge_shuffle( b: & mut Bencher ) {
286
- let first_map: $hashmap<usize , _ > = ( 0 ..MERGE ) . map( |i| ( i, ( ) ) ) . collect( ) ;
287
- let second_map: $hashmap<usize , _ > = ( MERGE ..MERGE * 2 ) . map( |i| ( i, ( ) ) ) . collect( ) ;
363
+ let first_map: $hashmap<usize , usize > = ( 0 ..MERGE ) . map( |i| ( i, i ) ) . collect( ) ;
364
+ let second_map: $hashmap<usize , usize > = ( MERGE ..MERGE * 2 ) . map( |i| ( i, i ) ) . collect( ) ;
288
365
let mut v = Vec :: new( ) ;
289
366
let mut rng = weak_rng( ) ;
290
367
b. iter( || {
@@ -300,4 +377,4 @@ macro_rules! bench_mod {
300
377
}
301
378
302
379
bench_mod ! ( hashmap, HashMap ) ;
303
- bench_mod ! ( hhhkvjv , HashMap2 ) ;
380
+ bench_mod ! ( hhkvkv , HashMap2 ) ;
0 commit comments