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_push_all(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_push_all_0000_0000(b: &mut Bencher) {
232 do_bench_push_all(b, 0, 0)
236 fn bench_push_all_0000_0010(b: &mut Bencher) {
237 do_bench_push_all(b, 0, 10)
241 fn bench_push_all_0000_0100(b: &mut Bencher) {
242 do_bench_push_all(b, 0, 100)
246 fn bench_push_all_0000_1000(b: &mut Bencher) {
247 do_bench_push_all(b, 0, 1000)
251 fn bench_push_all_0010_0010(b: &mut Bencher) {
252 do_bench_push_all(b, 10, 10)
256 fn bench_push_all_0100_0100(b: &mut Bencher) {
257 do_bench_push_all(b, 100, 100)
261 fn bench_push_all_1000_1000(b: &mut Bencher) {
262 do_bench_push_all(b, 1000, 1000)
265 fn do_bench_push_all_move(b: &mut Bencher, dst_len: usize, src_len: usize) {
266 let dst: Vec<_> = FromIterator::from_iter(0..dst_len);
267 let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);
269 b.bytes = src_len as u64;
272 let mut dst = dst.clone();
273 dst.extend(src.clone());
274 assert_eq!(dst.len(), dst_len + src_len);
275 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
280 fn bench_push_all_move_0000_0000(b: &mut Bencher) {
281 do_bench_push_all_move(b, 0, 0)
285 fn bench_push_all_move_0000_0010(b: &mut Bencher) {
286 do_bench_push_all_move(b, 0, 10)
290 fn bench_push_all_move_0000_0100(b: &mut Bencher) {
291 do_bench_push_all_move(b, 0, 100)
295 fn bench_push_all_move_0000_1000(b: &mut Bencher) {
296 do_bench_push_all_move(b, 0, 1000)
300 fn bench_push_all_move_0010_0010(b: &mut Bencher) {
301 do_bench_push_all_move(b, 10, 10)
305 fn bench_push_all_move_0100_0100(b: &mut Bencher) {
306 do_bench_push_all_move(b, 100, 100)
310 fn bench_push_all_move_1000_1000(b: &mut Bencher) {
311 do_bench_push_all_move(b, 1000, 1000)
314 fn do_bench_clone(b: &mut Bencher, src_len: usize) {
315 let src: Vec<usize> = FromIterator::from_iter(0..src_len);
317 b.bytes = src_len as u64;
320 let dst = src.clone();
321 assert_eq!(dst.len(), src_len);
322 assert!(dst.iter().enumerate().all(|(i, x)| i == *x));
327 fn bench_clone_0000(b: &mut Bencher) {
332 fn bench_clone_0010(b: &mut Bencher) {
333 do_bench_clone(b, 10)
337 fn bench_clone_0100(b: &mut Bencher) {
338 do_bench_clone(b, 100)
342 fn bench_clone_1000(b: &mut Bencher) {
343 do_bench_clone(b, 1000)
346 fn do_bench_clone_from(b: &mut Bencher, times: usize, dst_len: usize, src_len: usize) {
347 let dst: Vec<_> = FromIterator::from_iter(0..src_len);
348 let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);
350 b.bytes = (times * src_len) as u64;
353 let mut dst = dst.clone();
356 dst.clone_from(&src);
358 assert_eq!(dst.len(), src_len);
359 assert!(dst.iter().enumerate().all(|(i, x)| dst_len + i == *x));
365 fn bench_clone_from_01_0000_0000(b: &mut Bencher) {
366 do_bench_clone_from(b, 1, 0, 0)
370 fn bench_clone_from_01_0000_0010(b: &mut Bencher) {
371 do_bench_clone_from(b, 1, 0, 10)
375 fn bench_clone_from_01_0000_0100(b: &mut Bencher) {
376 do_bench_clone_from(b, 1, 0, 100)
380 fn bench_clone_from_01_0000_1000(b: &mut Bencher) {
381 do_bench_clone_from(b, 1, 0, 1000)
385 fn bench_clone_from_01_0010_0010(b: &mut Bencher) {
386 do_bench_clone_from(b, 1, 10, 10)
390 fn bench_clone_from_01_0100_0100(b: &mut Bencher) {
391 do_bench_clone_from(b, 1, 100, 100)
395 fn bench_clone_from_01_1000_1000(b: &mut Bencher) {
396 do_bench_clone_from(b, 1, 1000, 1000)
400 fn bench_clone_from_01_0010_0100(b: &mut Bencher) {
401 do_bench_clone_from(b, 1, 10, 100)
405 fn bench_clone_from_01_0100_1000(b: &mut Bencher) {
406 do_bench_clone_from(b, 1, 100, 1000)
410 fn bench_clone_from_01_0010_0000(b: &mut Bencher) {
411 do_bench_clone_from(b, 1, 10, 0)
415 fn bench_clone_from_01_0100_0010(b: &mut Bencher) {
416 do_bench_clone_from(b, 1, 100, 10)
420 fn bench_clone_from_01_1000_0100(b: &mut Bencher) {
421 do_bench_clone_from(b, 1, 1000, 100)
425 fn bench_clone_from_10_0000_0000(b: &mut Bencher) {
426 do_bench_clone_from(b, 10, 0, 0)
430 fn bench_clone_from_10_0000_0010(b: &mut Bencher) {
431 do_bench_clone_from(b, 10, 0, 10)
435 fn bench_clone_from_10_0000_0100(b: &mut Bencher) {
436 do_bench_clone_from(b, 10, 0, 100)
440 fn bench_clone_from_10_0000_1000(b: &mut Bencher) {
441 do_bench_clone_from(b, 10, 0, 1000)
445 fn bench_clone_from_10_0010_0010(b: &mut Bencher) {
446 do_bench_clone_from(b, 10, 10, 10)
450 fn bench_clone_from_10_0100_0100(b: &mut Bencher) {
451 do_bench_clone_from(b, 10, 100, 100)
455 fn bench_clone_from_10_1000_1000(b: &mut Bencher) {
456 do_bench_clone_from(b, 10, 1000, 1000)
460 fn bench_clone_from_10_0010_0100(b: &mut Bencher) {
461 do_bench_clone_from(b, 10, 10, 100)
465 fn bench_clone_from_10_0100_1000(b: &mut Bencher) {
466 do_bench_clone_from(b, 10, 100, 1000)
470 fn bench_clone_from_10_0010_0000(b: &mut Bencher) {
471 do_bench_clone_from(b, 10, 10, 0)
475 fn bench_clone_from_10_0100_0010(b: &mut Bencher) {
476 do_bench_clone_from(b, 10, 100, 10)
480 fn bench_clone_from_10_1000_0100(b: &mut Bencher) {
481 do_bench_clone_from(b, 10, 1000, 100)