@@ -16,6 +16,7 @@ use std::{
1616} ;
1717
1818const SIZE : usize = 1000 ;
19+ const OP_COUNT : usize = 500 ;
1920
2021// The default hashmap when using this crate directly.
2122type 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+
7996macro_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+
225319macro_rules! bench_iter {
226320 ( $name: ident, $maptype: ident, $keydist: expr) => {
227321 #[ bench]
0 commit comments