1 
2 extern crate arrayvec;
3 #[macro_use] extern crate bencher;
4 
5 use std::io::Write;
6 
7 use arrayvec::ArrayVec;
8 
9 use bencher::Bencher;
10 use bencher::black_box;
11 
extend_with_constant(b: &mut Bencher)12 fn extend_with_constant(b: &mut Bencher) {
13     let mut v = ArrayVec::<u8, 512>::new();
14     let cap = v.capacity();
15     b.iter(|| {
16         v.clear();
17         let constant = black_box(1);
18         v.extend((0..cap).map(move |_| constant));
19         v[511]
20     });
21     b.bytes = v.capacity() as u64;
22 }
23 
extend_with_range(b: &mut Bencher)24 fn extend_with_range(b: &mut Bencher) {
25     let mut v = ArrayVec::<u8, 512>::new();
26     let cap = v.capacity();
27     b.iter(|| {
28         v.clear();
29         let range = 0..cap;
30         v.extend(range.map(|x| black_box(x as _)));
31         v[511]
32     });
33     b.bytes = v.capacity() as u64;
34 }
35 
extend_with_slice(b: &mut Bencher)36 fn extend_with_slice(b: &mut Bencher) {
37     let mut v = ArrayVec::<u8, 512>::new();
38     let data = [1; 512];
39     b.iter(|| {
40         v.clear();
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 
extend_with_write(b: &mut Bencher)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]
55     });
56     b.bytes = v.capacity() as u64;
57 }
58 
extend_from_slice(b: &mut Bencher)59 fn extend_from_slice(b: &mut Bencher) {
60     let mut v = ArrayVec::<u8, 512>::new();
61     let data = [1; 512];
62     b.iter(|| {
63         v.clear();
64         v.try_extend_from_slice(&data).ok();
65         v[511]
66     });
67     b.bytes = v.capacity() as u64;
68 }
69 
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 
78 benchmark_main!(benches);
79