Skip to content

Commit 19001e6

Browse files
committed
Add benchmarks for gen_bool and SmallRng
1 parent 269f3fd commit 19001e6

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

benches/generators.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const BYTES_LEN: usize = 1024;
99
use std::mem::size_of;
1010
use test::{black_box, Bencher};
1111

12-
use rand::{RngCore, Rng, SeedableRng, NewRng, StdRng, OsRng, JitterRng, EntropyRng};
12+
use rand::{RngCore, Rng, SeedableRng, NewRng};
13+
use rand::{StdRng, SmallRng, OsRng, JitterRng, EntropyRng};
1314
use rand::{XorShiftRng, Hc128Rng, IsaacRng, Isaac64Rng, ChaChaRng};
1415
use rand::reseeding::ReseedingRng;
1516
use rand::prng::hc128::Hc128Core;
@@ -37,6 +38,7 @@ gen_bytes!(gen_bytes_hc128, Hc128Rng::new());
3738
gen_bytes!(gen_bytes_isaac, IsaacRng::new());
3839
gen_bytes!(gen_bytes_isaac64, Isaac64Rng::new());
3940
gen_bytes!(gen_bytes_std, StdRng::new());
41+
gen_bytes!(gen_bytes_small, SmallRng::new());
4042
gen_bytes!(gen_bytes_os, OsRng::new().unwrap());
4143

4244
macro_rules! gen_uint {
@@ -61,13 +63,15 @@ gen_uint!(gen_u32_hc128, u32, Hc128Rng::new());
6163
gen_uint!(gen_u32_isaac, u32, IsaacRng::new());
6264
gen_uint!(gen_u32_isaac64, u32, Isaac64Rng::new());
6365
gen_uint!(gen_u32_std, u32, StdRng::new());
66+
gen_uint!(gen_u32_small, u32, SmallRng::new());
6467
gen_uint!(gen_u32_os, u32, OsRng::new().unwrap());
6568

6669
gen_uint!(gen_u64_xorshift, u64, XorShiftRng::new());
6770
gen_uint!(gen_u64_hc128, u64, Hc128Rng::new());
6871
gen_uint!(gen_u64_isaac, u64, IsaacRng::new());
6972
gen_uint!(gen_u64_isaac64, u64, Isaac64Rng::new());
7073
gen_uint!(gen_u64_std, u64, StdRng::new());
74+
gen_uint!(gen_u64_small, u64, SmallRng::new());
7175
gen_uint!(gen_u64_os, u64, OsRng::new().unwrap());
7276

7377
// Do not test JitterRng like the others by running it RAND_BENCH_N times per,

benches/misc.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,39 @@
33
extern crate test;
44
extern crate rand;
55

6+
const RAND_BENCH_N: u64 = 1000;
7+
68
use test::{black_box, Bencher};
79

810
use rand::{SeedableRng, SmallRng, Rng, thread_rng};
911
use rand::seq::*;
1012

13+
#[bench]
14+
fn misc_gen_bool(b: &mut Bencher) {
15+
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
16+
b.iter(|| {
17+
let mut accum = true;
18+
for _ in 0..::RAND_BENCH_N {
19+
accum ^= rng.gen_bool(0.18);
20+
}
21+
black_box(accum);
22+
})
23+
}
24+
25+
#[bench]
26+
fn misc_gen_bool_var(b: &mut Bencher) {
27+
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
28+
b.iter(|| {
29+
let mut p = 0.18;
30+
let mut accum = true;
31+
for _ in 0..::RAND_BENCH_N {
32+
accum ^= rng.gen_bool(p);
33+
p += 0.0001;
34+
}
35+
black_box(accum);
36+
})
37+
}
38+
1139
#[bench]
1240
fn misc_shuffle_100(b: &mut Bencher) {
1341
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();

src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ impl<R: SeedableRng> NewRng for R {
817817
}
818818
}
819819

820-
/// The standard RNG. The PRNG algorithm in `StdRng` is choosen to be efficient
820+
/// The standard RNG. The PRNG algorithm in `StdRng` is chosen to be efficient
821821
/// on the current platform, to be statistically strong and unpredictable
822822
/// (meaning a cryptographically secure PRNG).
823823
///
@@ -866,7 +866,7 @@ impl SeedableRng for StdRng {
866866
}
867867

868868
/// An RNG recommended when small state, cheap initialization and good
869-
/// performance are required. The PRNG algorithm in `SmallRng` is choosen to be
869+
/// performance are required. The PRNG algorithm in `SmallRng` is chosen to be
870870
/// efficient on the current platform, **without consideration for cryptography
871871
/// or security**. The size of its state is much smaller than for `StdRng`.
872872
///
@@ -909,10 +909,12 @@ impl SeedableRng for StdRng {
909909
pub struct SmallRng(XorShiftRng);
910910

911911
impl RngCore for SmallRng {
912+
#[inline(always)]
912913
fn next_u32(&mut self) -> u32 {
913914
self.0.next_u32()
914915
}
915916

917+
#[inline(always)]
916918
fn next_u64(&mut self) -> u64 {
917919
self.0.next_u64()
918920
}

0 commit comments

Comments
 (0)