#![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::>(); b.iter(|| { x.shuffle(&mut rng); x[0] }) } #[bench] fn shuffle_fastrand(b: &mut Bencher) { let rng = fastrand::Rng::new(); let mut x = (0..100).collect::>(); 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::()); } sum }) } #[bench] fn u8_fastrand(b: &mut Bencher) { let 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::()); } sum }) } #[bench] fn u32_fastrand(b: &mut Bencher) { let 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 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 rng = fastrand::Rng::new(); b.iter(|| { let mut bytes = [0u8; 367]; for item in &mut bytes { *item = rng.u8(..); } bytes }) }