1 use std::iter::{repeat, FromIterator};
5 fn bench_new(b: &mut Bencher) {
7 let v: Vec<u32> = Vec::new();
8 assert_eq!(v.len(), 0);
9 assert_eq!(v.capacity(), 0);
13 fn do_bench_with_capacity(b: &mut Bencher, src_len: usize) {
14 b.bytes = src_len as u64;
17 let v: Vec<u32> = Vec::with_capacity(src_len);
18 assert_eq!(v.len(), 0);
19 assert_eq!(v.capacity(), src_len);
24 fn bench_with_capacity_0000(b: &mut Bencher) {
25 do_bench_with_capacity(b, 0)
29 fn bench_with_capacity_0010(b: &mut Bencher) {
30 do_bench_with_capacity(b, 10)
34 fn bench_with_capacity_0100(b: &mut Bencher) {
35 do_bench_with_capacity(b, 100)
39 fn bench_with_capacity_1000(b: &mut Bencher) {
40 do_bench_with_capacity(b, 1000)
43 fn do_bench_from_fn(b: &mut Bencher, src_len: usize) {
44 b.bytes = src_len as u64;
47 let dst = (0..src_len).collect::<Vec<_>>();
48 assert_eq!(dst.len(), src_len);
49 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
54 fn bench_from_fn_0000(b: &mut Bencher) {
55 do_bench_from_fn(b, 0)
59 fn bench_from_fn_0010(b: &mut Bencher) {
60 do_bench_from_fn(b, 10)
64 fn bench_from_fn_0100(b: &mut Bencher) {
65 do_bench_from_fn(b, 100)
69 fn bench_from_fn_1000(b: &mut Bencher) {
70 do_bench_from_fn(b, 1000)
73 fn do_bench_from_elem(b: &mut Bencher, src_len: usize) {
74 b.bytes = src_len as u64;
77 let dst: Vec<usize> = repeat(5).take(src_len).collect();
78 assert_eq!(dst.len(), src_len);
79 assert!(dst.iter().all(|x| *x == 5));
84 fn bench_from_elem_0000(b: &mut Bencher) {
85 do_bench_from_elem(b, 0)
89 fn bench_from_elem_0010(b: &mut Bencher) {
90 do_bench_from_elem(b, 10)
94 fn bench_from_elem_0100(b: &mut Bencher) {
95 do_bench_from_elem(b, 100)
99 fn bench_from_elem_1000(b: &mut Bencher) {
100 do_bench_from_elem(b, 1000)
103 fn do_bench_from_slice(b: &mut Bencher, src_len: usize) {
104 let src: Vec<_> = FromIterator::from_iter(0..src_len);
106 b.bytes = src_len as u64;
109 let dst = src.clone()[..].to_vec();
110 assert_eq!(dst.len(), src_len);
111 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
116 fn bench_from_slice_0000(b: &mut Bencher) {
117 do_bench_from_slice(b, 0)
121 fn bench_from_slice_0010(b: &mut Bencher) {
122 do_bench_from_slice(b, 10)
126 fn bench_from_slice_0100(b: &mut Bencher) {
127 do_bench_from_slice(b, 100)
131 fn bench_from_slice_1000(b: &mut Bencher) {
132 do_bench_from_slice(b, 1000)
135 fn do_bench_from_iter(b: &mut Bencher, src_len: usize) {
136 let src: Vec<_> = FromIterator::from_iter(0..src_len);
138 b.bytes = src_len as u64;
141 let dst: Vec<_> = FromIterator::from_iter(src.clone());
142 assert_eq!(dst.len(), src_len);
143 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
148 fn bench_from_iter_0000(b: &mut Bencher) {
149 do_bench_from_iter(b, 0)
153 fn bench_from_iter_0010(b: &mut Bencher) {
154 do_bench_from_iter(b, 10)
158 fn bench_from_iter_0100(b: &mut Bencher) {
159 do_bench_from_iter(b, 100)
163 fn bench_from_iter_1000(b: &mut Bencher) {
164 do_bench_from_iter(b, 1000)
167 fn do_bench_extend(b: &mut Bencher, dst_len: usize, src_len: usize) {
168 let dst: Vec<_> = FromIterator::from_iter(0..dst_len);
169 let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);
171 b.bytes = src_len as u64;
174 let mut dst = dst.clone();
175 dst.extend(src.clone());
176 assert_eq!(dst.len(), dst_len + src_len);
177 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
182 fn bench_extend_0000_0000(b: &mut Bencher) {
183 do_bench_extend(b, 0, 0)
187 fn bench_extend_0000_0010(b: &mut Bencher) {
188 do_bench_extend(b, 0, 10)
192 fn bench_extend_0000_0100(b: &mut Bencher) {
193 do_bench_extend(b, 0, 100)
197 fn bench_extend_0000_1000(b: &mut Bencher) {
198 do_bench_extend(b, 0, 1000)
202 fn bench_extend_0010_0010(b: &mut Bencher) {
203 do_bench_extend(b, 10, 10)
207 fn bench_extend_0100_0100(b: &mut Bencher) {
208 do_bench_extend(b, 100, 100)
212 fn bench_extend_1000_1000(b: &mut Bencher) {
213 do_bench_extend(b, 1000, 1000)
216 fn do_bench_extend_from_slice(b: &mut Bencher, dst_len: usize, src_len: usize) {
217 let dst: Vec<_> = FromIterator::from_iter(0..dst_len);
218 let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);
220 b.bytes = src_len as u64;
223 let mut dst = dst.clone();
224 dst.extend_from_slice(&src);
225 assert_eq!(dst.len(), dst_len + src_len);
226 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
231 fn bench_extend_from_slice_0000_0000(b: &mut Bencher) {
232 do_bench_extend_from_slice(b, 0, 0)
236 fn bench_extend_from_slice_0000_0010(b: &mut Bencher) {
237 do_bench_extend_from_slice(b, 0, 10)
241 fn bench_extend_from_slice_0000_0100(b: &mut Bencher) {
242 do_bench_extend_from_slice(b, 0, 100)
246 fn bench_extend_from_slice_0000_1000(b: &mut Bencher) {
247 do_bench_extend_from_slice(b, 0, 1000)
251 fn bench_extend_from_slice_0010_0010(b: &mut Bencher) {
252 do_bench_extend_from_slice(b, 10, 10)
256 fn bench_extend_from_slice_0100_0100(b: &mut Bencher) {
257 do_bench_extend_from_slice(b, 100, 100)
261 fn bench_extend_from_slice_1000_1000(b: &mut Bencher) {
262 do_bench_extend_from_slice(b, 1000, 1000)
265 fn do_bench_clone(b: &mut Bencher, src_len: usize) {
266 let src: Vec<usize> = FromIterator::from_iter(0..src_len);
268 b.bytes = src_len as u64;
271 let dst = src.clone();
272 assert_eq!(dst.len(), src_len);
273 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
278 fn bench_clone_0000(b: &mut Bencher) {
283 fn bench_clone_0010(b: &mut Bencher) {
284 do_bench_clone(b, 10)
288 fn bench_clone_0100(b: &mut Bencher) {
289 do_bench_clone(b, 100)
293 fn bench_clone_1000(b: &mut Bencher) {
294 do_bench_clone(b, 1000)
297 fn do_bench_clone_from(b: &mut Bencher, times: usize, dst_len: usize, src_len: usize) {
298 let dst: Vec<_> = FromIterator::from_iter(0..src_len);
299 let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);
301 b.bytes = (times * src_len) as u64;
304 let mut dst = dst.clone();
307 dst.clone_from(&src);
309 assert_eq!(dst.len(), src_len);
310 assert!(dst.iter().enumerate().all(|(i, x)| dst_len + i == *x));
316 fn bench_clone_from_01_0000_0000(b: &mut Bencher) {
317 do_bench_clone_from(b, 1, 0, 0)
321 fn bench_clone_from_01_0000_0010(b: &mut Bencher) {
322 do_bench_clone_from(b, 1, 0, 10)
326 fn bench_clone_from_01_0000_0100(b: &mut Bencher) {
327 do_bench_clone_from(b, 1, 0, 100)
331 fn bench_clone_from_01_0000_1000(b: &mut Bencher) {
332 do_bench_clone_from(b, 1, 0, 1000)
336 fn bench_clone_from_01_0010_0010(b: &mut Bencher) {
337 do_bench_clone_from(b, 1, 10, 10)
341 fn bench_clone_from_01_0100_0100(b: &mut Bencher) {
342 do_bench_clone_from(b, 1, 100, 100)
346 fn bench_clone_from_01_1000_1000(b: &mut Bencher) {
347 do_bench_clone_from(b, 1, 1000, 1000)
351 fn bench_clone_from_01_0010_0100(b: &mut Bencher) {
352 do_bench_clone_from(b, 1, 10, 100)
356 fn bench_clone_from_01_0100_1000(b: &mut Bencher) {
357 do_bench_clone_from(b, 1, 100, 1000)
361 fn bench_clone_from_01_0010_0000(b: &mut Bencher) {
362 do_bench_clone_from(b, 1, 10, 0)
366 fn bench_clone_from_01_0100_0010(b: &mut Bencher) {
367 do_bench_clone_from(b, 1, 100, 10)
371 fn bench_clone_from_01_1000_0100(b: &mut Bencher) {
372 do_bench_clone_from(b, 1, 1000, 100)
376 fn bench_clone_from_10_0000_0000(b: &mut Bencher) {
377 do_bench_clone_from(b, 10, 0, 0)
381 fn bench_clone_from_10_0000_0010(b: &mut Bencher) {
382 do_bench_clone_from(b, 10, 0, 10)
386 fn bench_clone_from_10_0000_0100(b: &mut Bencher) {
387 do_bench_clone_from(b, 10, 0, 100)
391 fn bench_clone_from_10_0000_1000(b: &mut Bencher) {
392 do_bench_clone_from(b, 10, 0, 1000)
396 fn bench_clone_from_10_0010_0010(b: &mut Bencher) {
397 do_bench_clone_from(b, 10, 10, 10)
401 fn bench_clone_from_10_0100_0100(b: &mut Bencher) {
402 do_bench_clone_from(b, 10, 100, 100)
406 fn bench_clone_from_10_1000_1000(b: &mut Bencher) {
407 do_bench_clone_from(b, 10, 1000, 1000)
411 fn bench_clone_from_10_0010_0100(b: &mut Bencher) {
412 do_bench_clone_from(b, 10, 10, 100)
416 fn bench_clone_from_10_0100_1000(b: &mut Bencher) {
417 do_bench_clone_from(b, 10, 100, 1000)
421 fn bench_clone_from_10_0010_0000(b: &mut Bencher) {
422 do_bench_clone_from(b, 10, 10, 0)
426 fn bench_clone_from_10_0100_0010(b: &mut Bencher) {
427 do_bench_clone_from(b, 10, 100, 10)
431 fn bench_clone_from_10_1000_0100(b: &mut Bencher) {
432 do_bench_clone_from(b, 10, 1000, 100)