Add benchmarks for fisher_yates_shuffle

This commit is contained in:
Paul Hauner 2019-02-26 19:31:10 +13:00
parent 0fe3a81c9e
commit a8ebc0e19c
No known key found for this signature in database
GPG Key ID: 303E4494BB28068C
2 changed files with 62 additions and 2 deletions

View File

@ -4,8 +4,13 @@ version = "0.1.0"
authors = ["Paul Hauner <paul@paulhauner.com>"]
edition = "2018"
[dependencies]
hashing = { path = "../hashing" }
[[bench]]
name = "benches"
harness = false
[dev-dependencies]
criterion = "0.2"
yaml-rust = "0.4.2"
[dependencies]
hashing = { path = "../hashing" }

View File

@ -0,0 +1,55 @@
use criterion::Criterion;
use criterion::{black_box, criterion_group, criterion_main, Benchmark};
use fisher_yates_shuffle::shuffle;
fn get_list(n: usize) -> Vec<usize> {
let mut list = Vec::with_capacity(n);
for i in 0..n {
list.push(i)
}
assert_eq!(list.len(), n);
list
}
fn shuffles(c: &mut Criterion) {
c.bench(
"whole list shuffle",
Benchmark::new("8 elements", move |b| {
let seed = vec![42; 32];
let list = get_list(8);
b.iter_with_setup(|| list.clone(), |list| black_box(shuffle(&seed, list)))
}),
);
c.bench(
"whole list shuffle",
Benchmark::new("16 elements", move |b| {
let seed = vec![42; 32];
let list = get_list(16);
b.iter_with_setup(|| list.clone(), |list| black_box(shuffle(&seed, list)))
}),
);
c.bench(
"whole list shuffle",
Benchmark::new("512 elements", move |b| {
let seed = vec![42; 32];
let list = get_list(512);
b.iter_with_setup(|| list.clone(), |list| black_box(shuffle(&seed, list)))
})
.sample_size(10),
);
c.bench(
"whole list shuffle",
Benchmark::new("16384 elements", move |b| {
let seed = vec![42; 32];
let list = get_list(16_384);
b.iter_with_setup(|| list.clone(), |list| black_box(shuffle(&seed, list)))
})
.sample_size(10),
);
}
criterion_group!(benches, shuffles);
criterion_main!(benches);