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