Skip to content

Commit 2b45cf5

Browse files
committed
Use lazy_static for a better lookup test
1 parent a9727ed commit 2b45cf5

File tree

2 files changed

+59
-17
lines changed

2 files changed

+59
-17
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ itertools = "0.4"
1414
rand = "0.3"
1515
quickcheck = "0.3.1"
1616
fnv = "1.0"
17+
lazy_static = "0.2"
1718

1819
[profile.bench]
1920
debug = true

benches/bench.rs

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
extern crate test;
33
extern crate rand;
44
extern crate fnv;
5+
#[macro_use]
6+
extern crate lazy_static;
57

68
use fnv::FnvHasher;
79
use std::hash::BuildHasherDefault;
@@ -300,42 +302,81 @@ fn lookup_orderedmap_10_000_noexist(b: &mut Bencher) {
300302
}
301303

302304
// 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+
}
304332

305333
#[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;
313336
b.iter(|| {
314337
let mut found = 0;
315-
for key in (c - LOOKUP_1M_SIZE)..c {
338+
for key in 0..LOOKUP_SAMPLE_SIZE {
316339
found += map.get(&key).is_some() as u32;
317340
}
318341
found
319342
});
320343
}
321344

345+
322346
#[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;
330349
b.iter(|| {
331350
let mut found = 0;
332-
for key in (c - LOOKUP_1M_SIZE)..c {
351+
for key in 0..LOOKUP_SAMPLE_SIZE {
333352
found += map.get(&key).is_some() as u32;
334353
}
335354
found
336355
});
337356
}
338357

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+
339380

340381
// without preallocation
341382
#[bench]

0 commit comments

Comments
 (0)