@@ -11,7 +11,6 @@ use smallvec::SmallVec;
1111const VEC_SIZE : usize = 16 ;
1212const SPILLED_SIZE : usize = 100 ;
1313
14-
1514trait 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+
224235fn 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