2
2
extern crate arrayvec;
3
3
#[ macro_use] extern crate bencher;
4
4
5
+ use std:: io:: Write ;
6
+
5
7
use arrayvec:: ArrayVec ;
6
8
7
9
use bencher:: Bencher ;
@@ -12,8 +14,9 @@ fn extend_with_constant(b: &mut Bencher) {
12
14
let cap = v. capacity ( ) ;
13
15
b. iter ( || {
14
16
v. clear ( ) ;
15
- v. extend ( ( 0 ..cap) . map ( |_| 1 ) ) ;
16
- v[ 0 ]
17
+ let constant = black_box ( 1 ) ;
18
+ v. extend ( ( 0 ..cap) . map ( move |_| constant) ) ;
19
+ v[ 511 ]
17
20
} ) ;
18
21
b. bytes = v. capacity ( ) as u64 ;
19
22
}
@@ -23,8 +26,9 @@ fn extend_with_range(b: &mut Bencher) {
23
26
let cap = v. capacity ( ) ;
24
27
b. iter ( || {
25
28
v. clear ( ) ;
26
- v. extend ( ( 0 ..cap) . map ( |x| x as _ ) ) ;
27
- v[ 0 ]
29
+ let range = 0 ..cap;
30
+ v. extend ( range. map ( |x| black_box ( x as _ ) ) ) ;
31
+ v[ 511 ]
28
32
} ) ;
29
33
b. bytes = v. capacity ( ) as u64 ;
30
34
}
@@ -34,8 +38,20 @@ fn extend_with_slice(b: &mut Bencher) {
34
38
let data = [ 1 ; 512 ] ;
35
39
b. iter ( || {
36
40
v. clear ( ) ;
37
- v. extend ( black_box ( data. iter ( ) ) . cloned ( ) ) ;
38
- v[ 0 ]
41
+ let iter = data. iter ( ) . map ( |& x| x) ;
42
+ v. extend ( iter) ;
43
+ v[ 511 ]
44
+ } ) ;
45
+ b. bytes = v. capacity ( ) as u64 ;
46
+ }
47
+
48
+ fn extend_with_write ( b : & mut Bencher ) {
49
+ let mut v = ArrayVec :: < [ u8 ; 512 ] > :: new ( ) ;
50
+ let data = [ 1 ; 512 ] ;
51
+ b. iter ( || {
52
+ v. clear ( ) ;
53
+ v. write ( & data[ ..] ) . ok ( ) ;
54
+ v[ 511 ]
39
55
} ) ;
40
56
b. bytes = v. capacity ( ) as u64 ;
41
57
}
@@ -51,5 +67,12 @@ fn extend_from_slice(b: &mut Bencher) {
51
67
b. bytes = v. capacity ( ) as u64 ;
52
68
}
53
69
54
- benchmark_group ! ( benches, extend_with_constant, extend_with_range, extend_with_slice, extend_from_slice) ;
70
+ benchmark_group ! ( benches,
71
+ extend_with_constant,
72
+ extend_with_range,
73
+ extend_with_slice,
74
+ extend_with_write,
75
+ extend_from_slice
76
+ ) ;
77
+
55
78
benchmark_main ! ( benches) ;
0 commit comments