| #![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 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 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 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 |
| }) |
| } |