@@ -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,67 @@ 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, 14500 ,
263+ loadfactor_lookup_16500, 16500 ,
264+ loadfactor_lookup_18500, 18500 ,
265+ loadfactor_lookup_20500, 20500 ,
266+ loadfactor_lookup_22500, 22500 ,
267+ loadfactor_lookup_24500, 24500 ,
268+ loadfactor_lookup_26500, 26500 ,
269+ loadfactor_lookup_28500, 28500
270+ ) ;
271+
272+ macro_rules! bench_lookup_fail_load_factor {
273+ ( $name: ident, $size: literal, $maptype: ident, $keydist: expr) => {
274+ #[ bench]
275+ fn $name( b: & mut Bencher ) {
276+ let mut m = $maptype:: default ( ) ;
277+ let mut iter = $keydist;
278+ for i in ( & mut iter) . take( $size) {
279+ m. insert( i, DropType ( i) ) ;
280+ }
281+
282+ b. iter( || {
283+ for i in ( & mut iter) . take( OP_COUNT ) {
284+ black_box( m. get( & i) ) ;
285+ }
286+ } )
287+ }
288+ } ;
289+ }
290+
291+ bench_suite_2 ! (
292+ bench_lookup_fail_load_factor,
293+ loadfactor_lookup_fail_14500, 14500 , // same capacity of 32768 * 0.875
294+ loadfactor_lookup_fail_16500, 16500 ,
295+ loadfactor_lookup_fail_18500, 18500 ,
296+ loadfactor_lookup_fail_20500, 20500 ,
297+ loadfactor_lookup_fail_22500, 22500 ,
298+ loadfactor_lookup_fail_24500, 24500 ,
299+ loadfactor_lookup_fail_26500, 26500 ,
300+ loadfactor_lookup_fail_28500, 28500
301+ ) ;
302+
225303macro_rules! bench_iter {
226304 ( $name: ident, $maptype: ident, $keydist: expr) => {
227305 #[ bench]
0 commit comments