diff options
| author | The8472 <git@infinite-source.de> | 2019-11-23 18:26:52 +0100 |
|---|---|---|
| committer | The8472 <git@infinite-source.de> | 2020-09-03 20:59:18 +0200 |
| commit | 3d5e9f1904e2c08369bfa7ec3963dab12a76544b (patch) | |
| tree | 4aa60525412d45cf3a777f74f1d4484a443abf8f | |
| parent | 2b0b2ae9f61c26338dc00c70eee936230b4b75c0 (diff) | |
| download | rust-3d5e9f1904e2c08369bfa7ec3963dab12a76544b.tar.gz rust-3d5e9f1904e2c08369bfa7ec3963dab12a76544b.zip | |
bench in-place zip
| -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); |
