Skip to content

Commit 96c049f

Browse files
committed
bench in-place zip
1 parent e207975 commit 96c049f

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

src/liballoc/benches/vec.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use rand::prelude::*;
12
use std::iter::{repeat, FromIterator};
23
use test::{black_box, Bencher};
34

@@ -551,6 +552,42 @@ fn bench_in_place_recycle(b: &mut test::Bencher) {
551552
});
552553
}
553554

555+
#[bench]
556+
fn bench_in_place_zip_recycle(b: &mut test::Bencher) {
557+
let mut data = vec![0u8; 256];
558+
let mut rng = rand::thread_rng();
559+
let mut subst = (0..=255u8).collect::<Vec<_>>();
560+
subst.shuffle(&mut rng);
561+
562+
b.iter(|| {
563+
let tmp = std::mem::replace(&mut data, Vec::new());
564+
let mangled = tmp
565+
.into_iter()
566+
.zip(subst.iter().copied())
567+
.enumerate()
568+
.map(|(i, (d, s))| d.wrapping_add(i as u8) ^ s)
569+
.collect::<Vec<_>>();
570+
assert_eq!(mangled.len(), 256);
571+
std::mem::replace(&mut data, black_box(mangled));
572+
});
573+
}
574+
575+
#[bench]
576+
fn bench_in_place_zip_iter_mut(b: &mut test::Bencher) {
577+
let mut data = vec![0u8; 256];
578+
let mut rng = rand::thread_rng();
579+
let mut subst = (0..=255u8).collect::<Vec<_>>();
580+
subst.shuffle(&mut rng);
581+
582+
b.iter(|| {
583+
data.iter_mut().enumerate().for_each(|(i, d)| {
584+
*d = d.wrapping_add(i as u8) ^ subst[i];
585+
});
586+
});
587+
588+
black_box(data);
589+
}
590+
554591
#[derive(Clone)]
555592
struct Droppable(usize);
556593

0 commit comments

Comments
 (0)