@@ -24,6 +24,12 @@ use rand::rngs::SmallRng;
24
24
use rand:: seq:: SliceRandom ;
25
25
use rand:: SeedableRng ;
26
26
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
+
27
33
#[ bench]
28
34
fn new_hashmap ( b : & mut Bencher ) {
29
35
b. iter ( || HashMap :: < String , String > :: new ( ) ) ;
@@ -277,7 +283,7 @@ where
277
283
I : IntoIterator ,
278
284
{
279
285
let mut v = Vec :: from_iter ( iter) ;
280
- let mut rng = SmallRng :: from_entropy ( ) ;
286
+ let mut rng = small_rng ( ) ;
281
287
v. shuffle ( & mut rng) ;
282
288
v
283
289
}
@@ -517,7 +523,7 @@ fn hashmap_merge_shuffle(b: &mut Bencher) {
517
523
let first_map: HashMap < u64 , _ > = ( 0 ..MERGE ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
518
524
let second_map: HashMap < u64 , _ > = ( MERGE ..MERGE * 2 ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
519
525
let mut v = Vec :: new ( ) ;
520
- let mut rng = SmallRng :: from_entropy ( ) ;
526
+ let mut rng = small_rng ( ) ;
521
527
b. iter ( || {
522
528
let mut merged = first_map. clone ( ) ;
523
529
v. extend ( second_map. iter ( ) . map ( |( & k, & v) | ( k, v) ) ) ;
@@ -544,7 +550,7 @@ fn indexmap_merge_shuffle(b: &mut Bencher) {
544
550
let first_map: IndexMap < u64 , _ > = ( 0 ..MERGE ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
545
551
let second_map: IndexMap < u64 , _ > = ( MERGE ..MERGE * 2 ) . map ( |i| ( i, ( ) ) ) . collect ( ) ;
546
552
let mut v = Vec :: new ( ) ;
547
- let mut rng = SmallRng :: from_entropy ( ) ;
553
+ let mut rng = small_rng ( ) ;
548
554
b. iter ( || {
549
555
let mut merged = first_map. clone ( ) ;
550
556
v. extend ( second_map. iter ( ) . map ( |( & k, & v) | ( k, v) ) ) ;
@@ -559,7 +565,7 @@ fn indexmap_merge_shuffle(b: &mut Bencher) {
559
565
fn swap_remove_indexmap_100_000 ( b : & mut Bencher ) {
560
566
let map = IMAP_100K . clone ( ) ;
561
567
let mut keys = Vec :: from_iter ( map. keys ( ) . cloned ( ) ) ;
562
- let mut rng = SmallRng :: from_entropy ( ) ;
568
+ let mut rng = small_rng ( ) ;
563
569
keys. shuffle ( & mut rng) ;
564
570
565
571
b. iter ( || {
@@ -576,7 +582,7 @@ fn swap_remove_indexmap_100_000(b: &mut Bencher) {
576
582
fn shift_remove_indexmap_100_000_few ( b : & mut Bencher ) {
577
583
let map = IMAP_100K . clone ( ) ;
578
584
let mut keys = Vec :: from_iter ( map. keys ( ) . cloned ( ) ) ;
579
- let mut rng = SmallRng :: from_entropy ( ) ;
585
+ let mut rng = small_rng ( ) ;
580
586
keys. shuffle ( & mut rng) ;
581
587
keys. truncate ( 50 ) ;
582
588
@@ -597,7 +603,7 @@ fn shift_remove_indexmap_2_000_full(b: &mut Bencher) {
597
603
for & key in & keys {
598
604
map. insert ( key, key) ;
599
605
}
600
- let mut rng = SmallRng :: from_entropy ( ) ;
606
+ let mut rng = small_rng ( ) ;
601
607
keys. shuffle ( & mut rng) ;
602
608
603
609
b. iter ( || {
0 commit comments