Skip to content

Commit 43b5fac

Browse files
authored
Merge pull request #130 from cuviper/bench-rng
Use a consistently seeded Rng for benchmark stability
2 parents 9525a63 + 0329bb4 commit 43b5fac

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

benches/bench.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ use rand::rngs::SmallRng;
2424
use rand::seq::SliceRandom;
2525
use 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]
2834
fn 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) {
559565
fn 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) {
576582
fn 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(|| {

benches/faststring.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,21 @@ use indexmap::IndexMap;
1212
use std::collections::HashMap;
1313
use std::iter::FromIterator;
1414

15+
use rand::rngs::SmallRng;
1516
use rand::seq::SliceRandom;
16-
use rand::thread_rng;
17+
use rand::SeedableRng;
1718

1819
use std::hash::{Hash, Hasher};
1920

2021
use std::borrow::Borrow;
2122
use std::ops::Deref;
2223

24+
/// Use a consistently seeded Rng for benchmark stability
25+
fn small_rng() -> SmallRng {
26+
let seed = u64::from_le_bytes(*b"indexmap");
27+
SmallRng::seed_from_u64(seed)
28+
}
29+
2330
#[derive(PartialEq, Eq, Copy, Clone)]
2431
#[repr(transparent)]
2532
pub struct OneShot<T: ?Sized>(pub T);
@@ -64,7 +71,7 @@ where
6471
I: IntoIterator,
6572
{
6673
let mut v = Vec::from_iter(iter);
67-
let mut rng = thread_rng();
74+
let mut rng = small_rng();
6875
v.shuffle(&mut rng);
6976
v
7077
}

0 commit comments

Comments
 (0)