diff options
| -rw-r--r-- | library/alloc/benches/vec.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/library/alloc/benches/vec.rs b/library/alloc/benches/vec.rs index ea8cd6b5155..a6af316e6a0 100644 --- a/library/alloc/benches/vec.rs +++ b/library/alloc/benches/vec.rs @@ -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); |
