| #![feature(test)] |
| |
| extern crate test; |
| extern crate rand; |
| |
| const RAND_BENCH_N: u64 = 1000; |
| |
| mod distributions; |
| |
| use std::mem::size_of; |
| use test::{black_box, Bencher}; |
| use rand::{XorShiftRng, StdRng, IsaacRng, Isaac64Rng, Rng}; |
| use rand::{OsRng, weak_rng}; |
| |
| #[bench] |
| fn rand_xorshift(b: &mut Bencher) { |
| let mut rng: XorShiftRng = OsRng::new().unwrap().gen(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.gen::<usize>()); |
| } |
| }); |
| b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_isaac(b: &mut Bencher) { |
| let mut rng: IsaacRng = OsRng::new().unwrap().gen(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.gen::<usize>()); |
| } |
| }); |
| b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_isaac64(b: &mut Bencher) { |
| let mut rng: Isaac64Rng = OsRng::new().unwrap().gen(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.gen::<usize>()); |
| } |
| }); |
| b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_std(b: &mut Bencher) { |
| let mut rng = StdRng::new().unwrap(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.gen::<usize>()); |
| } |
| }); |
| b.bytes = size_of::<usize>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_f32(b: &mut Bencher) { |
| let mut rng = StdRng::new().unwrap(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.next_f32()); |
| } |
| }); |
| b.bytes = size_of::<f32>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_f64(b: &mut Bencher) { |
| let mut rng = StdRng::new().unwrap(); |
| b.iter(|| { |
| for _ in 0..RAND_BENCH_N { |
| black_box(rng.next_f64()); |
| } |
| }); |
| b.bytes = size_of::<f64>() as u64 * RAND_BENCH_N; |
| } |
| |
| #[bench] |
| fn rand_shuffle_100(b: &mut Bencher) { |
| let mut rng = weak_rng(); |
| let x : &mut [usize] = &mut [1; 100]; |
| b.iter(|| { |
| rng.shuffle(x); |
| }) |
| } |