@@ -24,6 +24,12 @@ use rand::rngs::SmallRng;
2424use rand:: seq:: SliceRandom ;
2525use rand:: SeedableRng ;
2626
27+ /// Use a consistently seeded Rng for benchmark stability
28+ fn small_rng ( ) -> SmallRng {
29+ let seed = u64:: from_le_bytes ( * b"indexmap" ) ;
30+ SmallRng :: seed_from_u64 ( seed)
31+ }
32+
2733#[ bench]
2834fn new_hashmap ( b : & mut Bencher ) {
2935 b. iter ( || HashMap :: < String , String > :: new ( ) ) ;
@@ -277,7 +283,7 @@ where
277283 I : IntoIterator ,
278284{
279285 let mut v = Vec :: from_iter ( iter) ;
280- let mut rng = SmallRng :: from_entropy ( ) ;
286+ let mut rng = small_rng ( ) ;
281287 v. shuffle ( & mut rng) ;
282288 v
283289}
@@ -517,7 +523,7 @@ fn hashmap_merge_shuffle(b: &mut Bencher) {
517523 let first_map: HashMap < u64 , _ > = ( 0 ..MERGE ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
518524 let second_map: HashMap < u64 , _ > = ( MERGE ..MERGE * 2 ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
519525 let mut v = Vec :: new ( ) ;
520- let mut rng = SmallRng :: from_entropy ( ) ;
526+ let mut rng = small_rng ( ) ;
521527 b. iter ( || {
522528 let mut merged = first_map. clone ( ) ;
523529 v. extend ( second_map. iter ( ) . map ( |( & k, & v) | ( k, v) ) ) ;
@@ -544,7 +550,7 @@ fn indexmap_merge_shuffle(b: &mut Bencher) {
544550 let first_map: IndexMap < u64 , _ > = ( 0 ..MERGE ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
545551 let second_map: IndexMap < u64 , _ > = ( MERGE ..MERGE * 2 ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
546552 let mut v = Vec :: new ( ) ;
547- let mut rng = SmallRng :: from_entropy ( ) ;
553+ let mut rng = small_rng ( ) ;
548554 b. iter ( || {
549555 let mut merged = first_map. clone ( ) ;
550556 v. extend ( second_map. iter ( ) . map ( |( & k, & v) | ( k, v) ) ) ;
@@ -559,7 +565,7 @@ fn indexmap_merge_shuffle(b: &mut Bencher) {
559565fn swap_remove_indexmap_100_000 ( b : & mut Bencher ) {
560566 let map = IMAP_100K . clone ( ) ;
561567 let mut keys = Vec :: from_iter ( map. keys ( ) . cloned ( ) ) ;
562- let mut rng = SmallRng :: from_entropy ( ) ;
568+ let mut rng = small_rng ( ) ;
563569 keys. shuffle ( & mut rng) ;
564570
565571 b. iter ( || {
@@ -576,7 +582,7 @@ fn swap_remove_indexmap_100_000(b: &mut Bencher) {
576582fn shift_remove_indexmap_100_000_few ( b : & mut Bencher ) {
577583 let map = IMAP_100K . clone ( ) ;
578584 let mut keys = Vec :: from_iter ( map. keys ( ) . cloned ( ) ) ;
579- let mut rng = SmallRng :: from_entropy ( ) ;
585+ let mut rng = small_rng ( ) ;
580586 keys. shuffle ( & mut rng) ;
581587 keys. truncate ( 50 ) ;
582588
@@ -597,7 +603,7 @@ fn shift_remove_indexmap_2_000_full(b: &mut Bencher) {
597603 for & key in & keys {
598604 map. insert ( key, key) ;
599605 }
600- let mut rng = SmallRng :: from_entropy ( ) ;
606+ let mut rng = small_rng ( ) ;
601607 keys. shuffle ( & mut rng) ;
602608
603609 b. iter ( || {
0 commit comments