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.
This commit is contained in:
The 8472 2021-12-04 16:03:47 +01:00
parent 887999d163
commit d0f38cc4b4
1 changed files with 17 additions and 2 deletions

View File

@ -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<_>>()); 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] #[bench]
fn bench_retain_100000(b: &mut Bencher) { fn bench_retain_100000(b: &mut Bencher) {
let v = (1..=100000).collect::<Vec<u32>>(); let mut v = Vec::with_capacity(100000);
b.iter(|| { b.iter(|| {
let mut v = v.clone(); v.clear();
v.extend(black_box(1..=100000));
v.retain(|x| x & 1 == 0) v.retain(|x| x & 1 == 0)
}); });
} }