@@ -26,14 +26,33 @@ fn bench_push(b: &mut Bencher) {
2626#[ bench]
2727fn bench_insert ( b : & mut Bencher ) {
2828 #[ inline( never) ]
29- fn insert_noinline ( vec : & mut SmallVec < [ u64 ; 16 ] > , x : u64 ) {
30- vec. insert ( 0 , x)
29+ fn insert_noinline ( vec : & mut SmallVec < [ u64 ; 16 ] > , p : usize , x : u64 ) {
30+ vec. insert ( p , x)
3131 }
3232
3333 b. iter ( || {
3434 let mut vec: SmallVec < [ u64 ; 16 ] > = SmallVec :: new ( ) ;
35+ // insert at the end - 1 so we don't benchmark ptr::copy instead
36+ vec. insert ( 0 , 0 ) ;
3537 for x in 0 ..100 {
36- insert_noinline ( & mut vec, x) ;
38+ insert_noinline ( & mut vec, x, x as u64 ) ;
39+ }
40+ vec
41+ } ) ;
42+ }
43+
44+ #[ bench]
45+ fn bench_remove ( b : & mut Bencher ) {
46+ #[ inline( never) ]
47+ fn remove_noinline ( vec : & mut SmallVec < [ u64 ; 16 ] > , p : usize ) -> u64 {
48+ vec. remove ( p)
49+ }
50+
51+ b. iter ( || {
52+ let mut vec: SmallVec < [ u64 ; 16 ] > = smallvec ! [ 0 ; 101 ] ;
53+ // remove 1 element from the end so we don't benchmark ptr::copy instead
54+ for x in ( 0 ..100 ) . rev ( ) {
55+ remove_noinline ( & mut vec, x) ;
3756 }
3857 vec
3958 } ) ;
@@ -97,11 +116,10 @@ fn bench_insert_from_slice(b: &mut Bencher) {
97116#[ bench]
98117fn bench_pushpop ( b : & mut Bencher ) {
99118 #[ inline( never) ]
100- fn pushpop_noinline ( vec : & mut SmallVec < [ u64 ; 16 ] > , x : u64 ) {
119+ fn pushpop_noinline ( vec : & mut SmallVec < [ u64 ; 16 ] > , x : u64 ) -> Option < u64 > {
101120 vec. push ( x) ;
102- vec. pop ( ) ;
121+ vec. pop ( )
103122 }
104-
105123 b. iter ( || {
106124 let mut vec: SmallVec < [ u64 ; 16 ] > = SmallVec :: new ( ) ;
107125 for x in 0 ..100 {
0 commit comments