Skip to content

Commit d0f38cc

Browse files
committed
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.
1 parent 887999d commit d0f38cc

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

library/alloc/benches/vec.rs

+17-2
Original file line numberDiff line numberDiff line change
@@ -733,11 +733,26 @@ fn bench_flat_map_collect(b: &mut Bencher) {
733733
b.iter(|| v.iter().flat_map(|color| color.rotate_left(8).to_be_bytes()).collect::<Vec<_>>());
734734
}
735735

736+
/// Reference benchmark that `retain` has to compete with.
737+
#[bench]
738+
fn bench_retain_iter_100000(b: &mut Bencher) {
739+
let mut v = Vec::with_capacity(100000);
740+
741+
b.iter(|| {
742+
let mut tmp = std::mem::take(&mut v);
743+
tmp.clear();
744+
tmp.extend(black_box(1..=100000));
745+
v = tmp.into_iter().filter(|x| x & 1 == 0).collect();
746+
});
747+
}
748+
736749
#[bench]
737750
fn bench_retain_100000(b: &mut Bencher) {
738-
let v = (1..=100000).collect::<Vec<u32>>();
751+
let mut v = Vec::with_capacity(100000);
752+
739753
b.iter(|| {
740-
let mut v = v.clone();
754+
v.clear();
755+
v.extend(black_box(1..=100000));
741756
v.retain(|x| x & 1 == 0)
742757
});
743758
}

0 commit comments

Comments
 (0)