diff options
| author | The 8472 <git@infinite-source.de> | 2021-12-04 16:03:47 +0100 |
|---|---|---|
| committer | The 8472 <git@infinite-source.de> | 2021-12-04 16:20:35 +0100 |
| commit | d0f38cc4b432fd81853d489f70d3239fcc1d42bf (patch) | |
| tree | 5225bb1bdcdafc9b9f21982f156755722c6f4035 | |
| parent | 887999d163bace7e79370b952bdd1f930ff4cdd5 (diff) | |
update vec::retain benchmarks
Add `into_iter().filter().collect()` as a comparison point since it was reported to be faster than `retain`. Remove clone inside benchmark loop to reduce allocator noise.
| -rw-r--r-- | library/alloc/benches/vec.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/library/alloc/benches/vec.rs b/library/alloc/benches/vec.rs index 8e1d374b5d4..0da4886278e 100644 --- a/library/alloc/benches/vec.rs +++ b/library/alloc/benches/vec.rs @@ -733,11 +733,26 @@ fn bench_flat_map_collect(b: &mut Bencher) { b.iter(|| v.iter().flat_map(|color| color.rotate_left(8).to_be_bytes()).collect::<Vec<_>>()); } +/// Reference benchmark that `retain` has to compete with. +#[bench] +fn bench_retain_iter_100000(b: &mut Bencher) { + let mut v = Vec::with_capacity(100000); + + b.iter(|| { + let mut tmp = std::mem::take(&mut v); + tmp.clear(); + tmp.extend(black_box(1..=100000)); + v = tmp.into_iter().filter(|x| x & 1 == 0).collect(); + }); +} + #[bench] fn bench_retain_100000(b: &mut Bencher) { - let v = (1..=100000).collect::<Vec<u32>>(); + let mut v = Vec::with_capacity(100000); + b.iter(|| { - let mut v = v.clone(); + v.clear(); + v.extend(black_box(1..=100000)); v.retain(|x| x & 1 == 0) }); } |
