Skip to content

Commit 741ab83

Browse files
author
sarah
committed
doc,perf,bench:
- document unsafe code - improve perf for extend - add benchmark for extend
1 parent 0951617 commit 741ab83

File tree

3 files changed

+370
-93
lines changed

3 files changed

+370
-93
lines changed

benches/bench.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use smallvec::SmallVec;
1111
const VEC_SIZE: usize = 16;
1212
const SPILLED_SIZE: usize = 100;
1313

14-
1514
trait Vector<T>: for<'a> From<&'a [T]> + Extend<T> {
1615
fn new() -> Self;
1716
fn push(&mut self, val: T);
@@ -114,6 +113,8 @@ make_benches! {
114113
bench_remove_small => gen_remove(VEC_SIZE as _),
115114
bench_extend => gen_extend(SPILLED_SIZE as _),
116115
bench_extend_small => gen_extend(VEC_SIZE as _),
116+
bench_extend_filtered => gen_extend_filtered(SPILLED_SIZE as _),
117+
bench_extend_filtered_small => gen_extend_filtered(VEC_SIZE as _),
117118
bench_from_iter => gen_from_iter(SPILLED_SIZE as _),
118119
bench_from_iter_small => gen_from_iter(VEC_SIZE as _),
119120
bench_from_slice => gen_from_slice(SPILLED_SIZE as _),
@@ -138,6 +139,8 @@ make_benches! {
138139
bench_remove_vec_small => gen_remove(VEC_SIZE as _),
139140
bench_extend_vec => gen_extend(SPILLED_SIZE as _),
140141
bench_extend_vec_small => gen_extend(VEC_SIZE as _),
142+
bench_extend_vec_filtered => gen_extend_filtered(SPILLED_SIZE as _),
143+
bench_extend_vec_filtered_small => gen_extend_filtered(VEC_SIZE as _),
141144
bench_from_iter_vec => gen_from_iter(SPILLED_SIZE as _),
142145
bench_from_iter_vec_small => gen_from_iter(VEC_SIZE as _),
143146
bench_from_slice_vec => gen_from_slice(SPILLED_SIZE as _),
@@ -221,6 +224,14 @@ fn gen_extend<V: Vector<u64>>(n: u64, b: &mut Bencher) {
221224
});
222225
}
223226

227+
fn gen_extend_filtered<V: Vector<u64>>(n: u64, b: &mut Bencher) {
228+
b.iter(|| {
229+
let mut vec = V::new();
230+
vec.extend((0..n).filter(|i| i % 2 == 0));
231+
vec
232+
});
233+
}
234+
224235
fn gen_from_iter<V: Vector<u64>>(n: u64, b: &mut Bencher) {
225236
let v: Vec<u64> = (0..n).collect();
226237
b.iter(|| {

0 commit comments

Comments
 (0)