|
2 | 2 | extern crate test;
|
3 | 3 | extern crate rand;
|
4 | 4 | extern crate fnv;
|
| 5 | +#[macro_use] |
| 6 | +extern crate lazy_static; |
5 | 7 |
|
6 | 8 | use fnv::FnvHasher;
|
7 | 9 | use std::hash::BuildHasherDefault;
|
@@ -300,42 +302,81 @@ fn lookup_orderedmap_10_000_noexist(b: &mut Bencher) {
|
300 | 302 | }
|
301 | 303 |
|
302 | 304 | // number of items to look up
|
303 |
| -const LOOKUP_1M_SIZE: u32 = 5000; |
| 305 | +const LOOKUP_MAP_SIZE: u32 = 100_000_u32; |
| 306 | +const LOOKUP_SAMPLE_SIZE: u32 = 5000; |
| 307 | + |
| 308 | + |
| 309 | +lazy_static! { |
| 310 | + static ref HMAP_100K: HashMap<u32, u32> = { |
| 311 | + let c = LOOKUP_MAP_SIZE; |
| 312 | + let mut map = HashMap::with_capacity(c as usize); |
| 313 | + let keys = shuffled_keys(0..c); |
| 314 | + for &key in &keys { |
| 315 | + map.insert(key, key); |
| 316 | + } |
| 317 | + map |
| 318 | + }; |
| 319 | +} |
| 320 | + |
| 321 | +lazy_static! { |
| 322 | + static ref OMAP_100K: OrderMap<u32, u32> = { |
| 323 | + let c = LOOKUP_MAP_SIZE; |
| 324 | + let mut map = OrderMap::with_capacity(c as usize); |
| 325 | + let keys = shuffled_keys(0..c); |
| 326 | + for &key in &keys { |
| 327 | + map.insert(key, key); |
| 328 | + } |
| 329 | + map |
| 330 | + }; |
| 331 | +} |
304 | 332 |
|
305 | 333 | #[bench]
|
306 |
| -fn lookup_hashmap_100_000_exist(b: &mut Bencher) { |
307 |
| - let c = 100_000_u32; |
308 |
| - let mut map = HashMap::with_capacity(c as usize); |
309 |
| - let keys = shuffled_keys(0..c); |
310 |
| - for &key in &keys { |
311 |
| - map.insert(key, ()); |
312 |
| - } |
| 334 | +fn lookup_hashmap_100_000_multi(b: &mut Bencher) { |
| 335 | + let map = &*HMAP_100K; |
313 | 336 | b.iter(|| {
|
314 | 337 | let mut found = 0;
|
315 |
| - for key in (c - LOOKUP_1M_SIZE)..c { |
| 338 | + for key in 0..LOOKUP_SAMPLE_SIZE { |
316 | 339 | found += map.get(&key).is_some() as u32;
|
317 | 340 | }
|
318 | 341 | found
|
319 | 342 | });
|
320 | 343 | }
|
321 | 344 |
|
| 345 | + |
322 | 346 | #[bench]
|
323 |
| -fn lookup_ordermap_100_000_exist(b: &mut Bencher) { |
324 |
| - let c = 100_000_u32; |
325 |
| - let mut map = OrderMap::with_capacity(c as usize); |
326 |
| - let keys = shuffled_keys(0..c); |
327 |
| - for &key in &keys { |
328 |
| - map.insert(key, ()); |
329 |
| - } |
| 347 | +fn lookup_ordermap_100_000_multi(b: &mut Bencher) { |
| 348 | + let map = &*OMAP_100K; |
330 | 349 | b.iter(|| {
|
331 | 350 | let mut found = 0;
|
332 |
| - for key in (c - LOOKUP_1M_SIZE)..c { |
| 351 | + for key in 0..LOOKUP_SAMPLE_SIZE { |
333 | 352 | found += map.get(&key).is_some() as u32;
|
334 | 353 | }
|
335 | 354 | found
|
336 | 355 | });
|
337 | 356 | }
|
338 | 357 |
|
| 358 | +#[bench] |
| 359 | +fn lookup_hashmap_100_000_single(b: &mut Bencher) { |
| 360 | + let map = &*HMAP_100K; |
| 361 | + let mut iter = (0..LOOKUP_MAP_SIZE + LOOKUP_SAMPLE_SIZE).cycle(); |
| 362 | + b.iter(|| { |
| 363 | + let key = iter.next().unwrap(); |
| 364 | + map.get(&key).is_some() |
| 365 | + }); |
| 366 | +} |
| 367 | + |
| 368 | + |
| 369 | +#[bench] |
| 370 | +fn lookup_ordermap_100_000_single(b: &mut Bencher) { |
| 371 | + let map = &*OMAP_100K; |
| 372 | + let mut iter = (0..LOOKUP_MAP_SIZE + LOOKUP_SAMPLE_SIZE).cycle(); |
| 373 | + b.iter(|| { |
| 374 | + let key = iter.next().unwrap(); |
| 375 | + map.get(&key).is_some() |
| 376 | + }); |
| 377 | +} |
| 378 | + |
| 379 | + |
339 | 380 |
|
340 | 381 | // without preallocation
|
341 | 382 | #[bench]
|
|
0 commit comments