diff options
| author | The8472 <git@infinite-source.de> | 2020-12-02 22:15:53 +0100 |
|---|---|---|
| committer | The8472 <git@infinite-source.de> | 2021-03-21 20:54:05 +0100 |
| commit | a1a04e08428f2e2e26fd88c40141f7465f708c4e (patch) | |
| tree | dc0a07b206a637fdafed35e2c2aca8afdfb25cb1 | |
| parent | f82664191d0e8764b7435b9d72eb0e366b8b1464 (diff) | |
| download | rust-a1a04e08428f2e2e26fd88c40141f7465f708c4e.tar.gz rust-a1a04e08428f2e2e26fd88c40141f7465f708c4e.zip | |
add transmute-via-iterators bench
| -rw-r--r-- | library/alloc/benches/vec.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/library/alloc/benches/vec.rs b/library/alloc/benches/vec.rs index 73eb353f6e7..7a098219ce4 100644 --- a/library/alloc/benches/vec.rs +++ b/library/alloc/benches/vec.rs @@ -548,6 +548,22 @@ fn bench_in_place_zip_iter_mut(b: &mut Bencher) { black_box(data); } +pub fn vec_cast<T, U>(input: Vec<T>) -> Vec<U> { + input.into_iter().map(|e| unsafe { std::mem::transmute_copy(&e) }).collect() +} + +#[bench] +fn bench_transmute(b: &mut Bencher) { + let mut vec = vec![10u32; 100]; + b.bytes = 800; // 2 casts x 4 bytes x 100 + b.iter(|| { + let v = std::mem::take(&mut vec); + let v = black_box(vec_cast::<u32, i32>(v)); + let v = black_box(vec_cast::<i32, u32>(v)); + vec = v; + }); +} + #[derive(Clone)] struct Droppable(usize); |
