Skip to content

Commit fd99e8b

Browse files
committed
Add StdRng serde
We get this for free after implementing Isaac via derive.
1 parent 9d4a0cb commit fd99e8b

19 files changed

+6231
-0
lines changed

benches/bench.rs.bk

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#![feature(test)]
2+
3+
extern crate test;
4+
extern crate rand;
5+
6+
const RAND_BENCH_N: u64 = 1000;
7+
8+
mod distributions;
9+
10+
use std::mem::size_of;
11+
use test::{black_box, Bencher};
12+
use rand::{XorShiftRng, StdRng, IsaacRng, Isaac64Rng, Rng};
13+
use rand::{OsRng, sample, weak_rng};
14+
15+
#[bench]
16+
fn rand_xorshift(b: &mut Bencher) {
17+
let mut rng: XorShiftRng = OsRng::new().unwrap().gen();
18+
b.iter(|| {
19+
for _ in 0..RAND_BENCH_N {
20+
black_box(rng.gen::<usize>());
21+
}
22+
});
23+
b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N;
24+
}
25+
26+
#[bench]
27+
fn rand_isaac(b: &mut Bencher) {
28+
let mut rng: IsaacRng = OsRng::new().unwrap().gen();
29+
b.iter(|| {
30+
for _ in 0..RAND_BENCH_N {
31+
black_box(rng.gen::<usize>());
32+
}
33+
});
34+
b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N;
35+
}
36+
37+
#[bench]
38+
fn rand_isaac64(b: &mut Bencher) {
39+
let mut rng: Isaac64Rng = OsRng::new().unwrap().gen();
40+
b.iter(|| {
41+
for _ in 0..RAND_BENCH_N {
42+
black_box(rng.gen::<usize>());
43+
}
44+
});
45+
b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N;
46+
}
47+
48+
#[bench]
49+
fn rand_std(b: &mut Bencher) {
50+
let mut rng = StdRng::new().unwrap();
51+
b.iter(|| {
52+
for _ in 0..RAND_BENCH_N {
53+
black_box(rng.gen::<usize>());
54+
}
55+
});
56+
b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N;
57+
}
58+
59+
#[bench]
60+
fn rand_f32(b: &mut Bencher) {
61+
let mut rng = StdRng::new().unwrap();
62+
b.iter(|| {
63+
for _ in 0..RAND_BENCH_N {
64+
black_box(rng.next_f32());
65+
}
66+
});
67+
b.bytes = size_of::<f32>() as u64 * RAND_BENCH_N;
68+
}
69+
70+
#[bench]
71+
fn rand_f64(b: &mut Bencher) {
72+
let mut rng = StdRng::new().unwrap();
73+
b.iter(|| {
74+
for _ in 0..RAND_BENCH_N {
75+
black_box(rng.next_f64());
76+
}
77+
});
78+
b.bytes = size_of::<f64>() as u64 * RAND_BENCH_N;
79+
}
80+
81+
#[bench]
82+
fn rand_shuffle_100(b: &mut Bencher) {
83+
let mut rng = weak_rng();
84+
let x : &mut [usize] = &mut [1; 100];
85+
b.iter(|| {
86+
rng.shuffle(x);
87+
})
88+
}
89+
90+
#[bench]
91+
fn rand_sample_10_of_100(b: &mut Bencher) {
92+
let mut rng = weak_rng();
93+
let x : &[usize] = &[1; 100];
94+
b.iter(|| {
95+
sample(&mut rng, x, 10);
96+
})
97+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use std::mem::size_of;
2+
use test::Bencher;
3+
use rand;
4+
use rand::distributions::exponential::Exp;
5+
use rand::distributions::Sample;
6+
7+
#[bench]
8+
fn rand_exp(b: &mut Bencher) {
9+
let mut rng = rand::weak_rng();
10+
let mut exp = Exp::new(2.71828 * 3.14159);
11+
12+
b.iter(|| {
13+
for _ in 0..::RAND_BENCH_N {
14+
exp.sample(&mut rng);
15+
}
16+
});
17+
b.bytes = size_of::<f64>() as u64 * ::RAND_BENCH_N;
18+
}

benches/distributions/gamma.rs.bk

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use std::mem::size_of;
2+
use test::Bencher;
3+
use rand;
4+
use rand::distributions::IndependentSample;
5+
use rand::distributions::gamma::Gamma;
6+
7+
#[bench]
8+
fn bench_gamma_large_shape(b: &mut Bencher) {
9+
let gamma = Gamma::new(10., 1.0);
10+
let mut rng = rand::weak_rng();
11+
12+
b.iter(|| {
13+
for _ in 0..::RAND_BENCH_N {
14+
gamma.ind_sample(&mut rng);
15+
}
16+
});
17+
b.bytes = size_of::<f64>() as u64 * ::RAND_BENCH_N;
18+
}
19+
20+
#[bench]
21+
fn bench_gamma_small_shape(b: &mut Bencher) {
22+
let gamma = Gamma::new(0.1, 1.0);
23+
let mut rng = rand::weak_rng();
24+
25+
b.iter(|| {
26+
for _ in 0..::RAND_BENCH_N {
27+
gamma.ind_sample(&mut rng);
28+
}
29+
});
30+
b.bytes = size_of::<f64>() as u64 * ::RAND_BENCH_N;
31+
}

benches/distributions/mod.rs.bk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
mod exponential;
2+
mod normal;
3+
mod gamma;

benches/distributions/normal.rs.bk

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use std::mem::size_of;
2+
use test::Bencher;
3+
use rand;
4+
use rand::distributions::Sample;
5+
use rand::distributions::normal::Normal;
6+
7+
#[bench]
8+
fn rand_normal(b: &mut Bencher) {
9+
let mut rng = rand::weak_rng();
10+
let mut normal = Normal::new(-2.71828, 3.14159);
11+
12+
b.iter(|| {
13+
for _ in 0..::RAND_BENCH_N {
14+
normal.sample(&mut rng);
15+
}
16+
});
17+
b.bytes = size_of::<f64>() as u64 * ::RAND_BENCH_N;
18+
}

0 commit comments

Comments
 (0)