bench in-place zip
This commit is contained in:
parent
2b0b2ae9f6
commit
3d5e9f1904
1 changed files with 37 additions and 0 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue