bench in-place zip

This commit is contained in:
The8472 2019-11-23 18:26:52 +01:00
parent 2b0b2ae9f6
commit 3d5e9f1904

View file

@ -1,3 +1,4 @@
use rand::prelude::*;
use std::iter::{repeat, FromIterator};
use test::{black_box, Bencher};
@ -501,6 +502,42 @@ fn bench_in_place_recycle(b: &mut test::Bencher) {
});
}
#[bench]
fn bench_in_place_zip_recycle(b: &mut test::Bencher) {
let mut data = vec![0u8; 256];
let mut rng = rand::thread_rng();
let mut subst = (0..=255u8).collect::<Vec<_>>();
subst.shuffle(&mut rng);
b.iter(|| {
let tmp = std::mem::replace(&mut data, Vec::new());
let mangled = tmp
.into_iter()
.zip(subst.iter().copied())
.enumerate()
.map(|(i, (d, s))| d.wrapping_add(i as u8) ^ s)
.collect::<Vec<_>>();
assert_eq!(mangled.len(), 256);
std::mem::replace(&mut data, black_box(mangled));
});
}
#[bench]
fn bench_in_place_zip_iter_mut(b: &mut test::Bencher) {
let mut data = vec![0u8; 256];
let mut rng = rand::thread_rng();
let mut subst = (0..=255u8).collect::<Vec<_>>();
subst.shuffle(&mut rng);
b.iter(|| {
data.iter_mut().enumerate().for_each(|(i, d)| {
*d = d.wrapping_add(i as u8) ^ subst[i];
});
});
black_box(data);
}
#[derive(Clone)]
struct Droppable(usize);