99 lines
1.9 KiB
Rust
99 lines
1.9 KiB
Rust
#![feature(test)]
|
|
|
|
extern crate test;
|
|
|
|
use rand::prelude::*;
|
|
use test::Bencher;
|
|
use wyhash::WyRng;
|
|
|
|
#[bench]
|
|
fn shuffle_wyhash(b: &mut Bencher) {
|
|
let mut rng = WyRng::from_rng(thread_rng()).unwrap();
|
|
let mut x = (0..100).collect::<Vec<usize>>();
|
|
b.iter(|| {
|
|
x.shuffle(&mut rng);
|
|
x[0]
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn shuffle_fastrand(b: &mut Bencher) {
|
|
let mut rng = fastrand::Rng::new();
|
|
let mut x = (0..100).collect::<Vec<usize>>();
|
|
b.iter(|| {
|
|
rng.shuffle(&mut x);
|
|
x[0]
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn u8_wyhash(b: &mut Bencher) {
|
|
let mut rng = WyRng::from_rng(thread_rng()).unwrap();
|
|
b.iter(|| {
|
|
let mut sum = 0u8;
|
|
for _ in 0..10_000 {
|
|
sum = sum.wrapping_add(rng.gen::<u8>());
|
|
}
|
|
sum
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn u8_fastrand(b: &mut Bencher) {
|
|
let mut rng = fastrand::Rng::new();
|
|
b.iter(|| {
|
|
let mut sum = 0u8;
|
|
for _ in 0..10_000 {
|
|
sum = sum.wrapping_add(rng.u8(..));
|
|
}
|
|
sum
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn u32_wyhash(b: &mut Bencher) {
|
|
let mut rng = WyRng::from_rng(thread_rng()).unwrap();
|
|
b.iter(|| {
|
|
let mut sum = 0u32;
|
|
for _ in 0..10_000 {
|
|
sum = sum.wrapping_add(rng.gen::<u32>());
|
|
}
|
|
sum
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn u32_fastrand(b: &mut Bencher) {
|
|
let mut rng = fastrand::Rng::new();
|
|
b.iter(|| {
|
|
let mut sum = 0u32;
|
|
for _ in 0..10_000 {
|
|
sum = sum.wrapping_add(rng.u32(..));
|
|
}
|
|
sum
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn fill(b: &mut Bencher) {
|
|
let mut rng = fastrand::Rng::new();
|
|
b.iter(|| {
|
|
// Pick a size that isn't divisble by 8.
|
|
let mut bytes = [0u8; 367];
|
|
rng.fill(&mut bytes);
|
|
bytes
|
|
})
|
|
}
|
|
|
|
#[bench]
|
|
fn fill_naive(b: &mut Bencher) {
|
|
let mut rng = fastrand::Rng::new();
|
|
b.iter(|| {
|
|
let mut bytes = [0u8; 367];
|
|
for item in &mut bytes {
|
|
*item = rng.u8(..);
|
|
}
|
|
bytes
|
|
})
|
|
}
|