Skip to content

Commit 71f8f37

Browse files
authored
Merge pull request #637 from gaujay/add-benchmarks
Add benchmarks to monitor lookup hit/miss performances depending on load factor
2 parents 1243c52 + e1b6030 commit 71f8f37

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

benches/bench.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use std::{
1616
};
1717

1818
const SIZE: usize = 1000;
19+
const OP_COUNT: usize = 500;
1920

2021
// The default hashmap when using this crate directly.
2122
type FoldHashMap<K, V> = HashMap<K, V, DefaultHashBuilder>;
@@ -76,6 +77,22 @@ macro_rules! bench_suite {
7677
};
7778
}
7879

80+
macro_rules! bench_suite_2 {
81+
($bench_macro:ident,
82+
$name0:ident, $size0:literal, $name1:ident, $size1:literal, $name2:ident, $size2:literal,
83+
$name3:ident, $size3:literal, $name4:ident, $size4:literal, $name5:ident, $size5:literal,
84+
$name6:ident, $size6:literal, $name7:ident, $size7:literal) => {
85+
$bench_macro!($name0, $size0, FoldHashMap, RandomKeys::new());
86+
$bench_macro!($name1, $size1, FoldHashMap, RandomKeys::new());
87+
$bench_macro!($name2, $size2, FoldHashMap, RandomKeys::new());
88+
$bench_macro!($name3, $size3, FoldHashMap, RandomKeys::new());
89+
$bench_macro!($name4, $size4, FoldHashMap, RandomKeys::new());
90+
$bench_macro!($name5, $size5, FoldHashMap, RandomKeys::new());
91+
$bench_macro!($name6, $size6, FoldHashMap, RandomKeys::new());
92+
$bench_macro!($name7, $size7, FoldHashMap, RandomKeys::new());
93+
};
94+
}
95+
7996
macro_rules! bench_insert {
8097
($name:ident, $maptype:ident, $keydist:expr) => {
8198
#[bench]
@@ -222,6 +239,83 @@ bench_suite!(
222239
lookup_fail_std_random
223240
);
224241

242+
macro_rules! bench_lookup_load_factor {
243+
($name:ident, $size:literal, $maptype:ident, $keydist:expr) => {
244+
#[bench]
245+
fn $name(b: &mut Bencher) {
246+
let mut m = $maptype::default();
247+
for i in $keydist.take($size) {
248+
m.insert(i, DropType(i));
249+
}
250+
251+
b.iter(|| {
252+
for i in $keydist.take(OP_COUNT) {
253+
black_box(m.get(&i));
254+
}
255+
});
256+
}
257+
};
258+
}
259+
260+
bench_suite_2!(
261+
bench_lookup_load_factor, // same capacity of 32768 * 0.875
262+
loadfactor_lookup_14500,
263+
14500,
264+
loadfactor_lookup_16500,
265+
16500,
266+
loadfactor_lookup_18500,
267+
18500,
268+
loadfactor_lookup_20500,
269+
20500,
270+
loadfactor_lookup_22500,
271+
22500,
272+
loadfactor_lookup_24500,
273+
24500,
274+
loadfactor_lookup_26500,
275+
26500,
276+
loadfactor_lookup_28500,
277+
28500
278+
);
279+
280+
macro_rules! bench_lookup_fail_load_factor {
281+
($name:ident, $size:literal, $maptype:ident, $keydist:expr) => {
282+
#[bench]
283+
fn $name(b: &mut Bencher) {
284+
let mut m = $maptype::default();
285+
let mut iter = $keydist;
286+
for i in (&mut iter).take($size) {
287+
m.insert(i, DropType(i));
288+
}
289+
290+
b.iter(|| {
291+
for i in (&mut iter).take(OP_COUNT) {
292+
black_box(m.get(&i));
293+
}
294+
})
295+
}
296+
};
297+
}
298+
299+
bench_suite_2!(
300+
bench_lookup_fail_load_factor, // same capacity of 32768 * 0.875
301+
loadfactor_lookup_fail_14500,
302+
14500,
303+
loadfactor_lookup_fail_16500,
304+
16500,
305+
loadfactor_lookup_fail_18500,
306+
18500,
307+
loadfactor_lookup_fail_20500,
308+
20500,
309+
loadfactor_lookup_fail_22500,
310+
22500,
311+
loadfactor_lookup_fail_24500,
312+
24500,
313+
loadfactor_lookup_fail_26500,
314+
26500,
315+
loadfactor_lookup_fail_28500,
316+
28500
317+
);
318+
225319
macro_rules! bench_iter {
226320
($name:ident, $maptype:ident, $keydist:expr) => {
227321
#[bench]

0 commit comments

Comments
 (0)