Introduce faster swap-or-not whole-list shuffle

This commit is contained in:
Paul Hauner
2019-03-01 01:47:40 +11:00
parent ed032dddea
commit 8aa7f25bbc
3 changed files with 71 additions and 19 deletions

View File

@@ -1,6 +1,6 @@
use criterion::Criterion;
use criterion::{black_box, criterion_group, criterion_main, Benchmark};
use swap_or_not_shuffle::get_permutated_index;
use swap_or_not_shuffle::{get_permutated_index, get_permutated_list};
const SHUFFLE_ROUND_COUNT: u8 = 90;
@@ -48,6 +48,16 @@ fn shuffles(c: &mut Criterion) {
.sample_size(10),
);
c.bench(
"_fast_ whole list shuffle",
Benchmark::new("512 elements", move |b| {
let seed = vec![42; 32];
let list: Vec<usize> = (0..512).collect();
b.iter(|| black_box(get_permutated_list(&list, &seed, SHUFFLE_ROUND_COUNT)))
})
.sample_size(10),
);
c.bench(
"whole list shuffle",
Benchmark::new("16384 elements", move |b| {
@@ -56,6 +66,16 @@ fn shuffles(c: &mut Criterion) {
})
.sample_size(10),
);
c.bench(
"_fast_ whole list shuffle",
Benchmark::new("16384 elements", move |b| {
let seed = vec![42; 32];
let list: Vec<usize> = (0..16384).collect();
b.iter(|| black_box(get_permutated_list(&list, &seed, SHUFFLE_ROUND_COUNT)))
})
.sample_size(10),
);
}
criterion_group!(benches, shuffles,);