1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 use std
::iter
::{FromIterator, repeat}
;
12 use std
::mem
::size_of
;
18 struct DropCounter
<'a
> {
22 impl<'a
> Drop
for DropCounter
<'a
> {
31 let xs
= [1u8, 2u8, 3u8];
32 assert_eq
!(&**as_vec(&xs
), xs
);
37 fn test_as_vec_dtor() {
38 let (mut count_x
, mut count_y
) = (0, 0);
40 let xs
= &[DropCounter { count: &mut count_x }
, DropCounter { count: &mut count_y }
];
41 assert_eq
!(as_vec(xs
).len(), 2);
43 assert_eq
!(count_x
, 1);
44 assert_eq
!(count_y
, 1);
48 fn test_small_vec_struct() {
49 assert
!(size_of
::<Vec
<u8>>() == size_of
::<usize>() * 3);
53 fn test_double_drop() {
59 let (mut count_x
, mut count_y
) = (0, 0);
65 tv
.x
.push(DropCounter {count: &mut count_x}
);
66 tv
.y
.push(DropCounter {count: &mut count_y}
);
68 // If Vec had a drop flag, here is where it would be zeroed.
69 // Instead, it should rely on its internal state to prevent
70 // doing anything significant when dropped multiple times.
73 // Here tv goes out of scope, tv.y should be dropped, but not tv.x.
76 assert_eq
!(count_x
, 1);
77 assert_eq
!(count_y
, 1);
82 let mut v
= Vec
::new();
83 assert_eq
!(v
.capacity(), 0);
86 assert
!(v
.capacity() >= 2);
92 assert
!(v
.capacity() >= 16);
94 assert
!(v
.capacity() >= 32);
99 assert
!(v
.capacity() >= 33)
104 let mut v
= Vec
::new();
105 let mut w
= Vec
::new();
108 for i
in 0..3 { w.push(i) }
113 for i
in 3..10 { w.push(i) }
119 fn test_extend_ref() {
120 let mut v
= vec
![1, 2];
121 v
.extend(&[3, 4, 5]);
123 assert_eq
!(v
.len(), 5);
124 assert_eq
!(v
, [1, 2, 3, 4, 5]);
129 assert_eq
!(v
.len(), 7);
130 assert_eq
!(v
, [1, 2, 3, 4, 5, 6, 7]);
134 fn test_slice_from_mut() {
135 let mut values
= vec
![1, 2, 3, 4, 5];
137 let slice
= &mut values
[2 ..];
138 assert
!(slice
== [3, 4, 5]);
144 assert
!(values
== [1, 2, 5, 6, 7]);
148 fn test_slice_to_mut() {
149 let mut values
= vec
![1, 2, 3, 4, 5];
151 let slice
= &mut values
[.. 2];
152 assert
!(slice
== [1, 2]);
158 assert
!(values
== [2, 3, 3, 4, 5]);
162 fn test_split_at_mut() {
163 let mut values
= vec
![1, 2, 3, 4, 5];
165 let (left
, right
) = values
.split_at_mut(2);
167 let left
: &[_
] = left
;
168 assert
!(&left
[..left
.len()] == &[1, 2]);
175 let right
: &[_
] = right
;
176 assert
!(&right
[..right
.len()] == &[3, 4, 5]);
183 assert_eq
!(values
, [2, 3, 5, 6, 7]);
188 let v
: Vec
<i32> = vec
![];
189 let w
= vec
!(1, 2, 3);
191 assert_eq
!(v
, v
.clone());
195 // they should be disjoint in memory.
196 assert
!(w
.as_ptr() != z
.as_ptr())
200 fn test_clone_from() {
202 let three
: Vec
<Box
<_
>> = vec
!(box 1, box 2, box 3);
203 let two
: Vec
<Box
<_
>> = vec
!(box 4, box 5);
205 v
.clone_from(&three
);
206 assert_eq
!(v
, three
);
209 v
.clone_from(&three
);
210 assert_eq
!(v
, three
);
217 v
.clone_from(&three
);
223 let mut vec
= vec
![1, 2, 3, 4];
224 vec
.retain(|&x
| x
% 2 == 0);
225 assert_eq
!(vec
, [2, 4]);
229 fn zero_sized_values() {
230 let mut v
= Vec
::new();
231 assert_eq
!(v
.len(), 0);
233 assert_eq
!(v
.len(), 1);
235 assert_eq
!(v
.len(), 2);
236 assert_eq
!(v
.pop(), Some(()));
237 assert_eq
!(v
.pop(), Some(()));
238 assert_eq
!(v
.pop(), None
);
240 assert_eq
!(v
.iter().count(), 0);
242 assert_eq
!(v
.iter().count(), 1);
244 assert_eq
!(v
.iter().count(), 2);
248 assert_eq
!(v
.iter_mut().count(), 2);
250 assert_eq
!(v
.iter_mut().count(), 3);
252 assert_eq
!(v
.iter_mut().count(), 4);
254 for &mut () in &mut v {}
255 unsafe { v.set_len(0); }
256 assert_eq
!(v
.iter_mut().count(), 0);
260 fn test_partition() {
261 assert_eq
!(vec
![].into_iter().partition(|x
: &i32| *x
< 3), (vec
![], vec
![]));
262 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 4), (vec
![1, 2, 3], vec
![]));
263 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 2), (vec
![1], vec
![2, 3]));
264 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 0), (vec
![], vec
![1, 2, 3]));
268 fn test_zip_unzip() {
269 let z1
= vec
![(1, 4), (2, 5), (3, 6)];
271 let (left
, right
): (Vec
<_
>, Vec
<_
>) = z1
.iter().cloned().unzip();
273 assert_eq
!((1, 4), (left
[0], right
[0]));
274 assert_eq
!((2, 5), (left
[1], right
[1]));
275 assert_eq
!((3, 6), (left
[2], right
[2]));
279 fn test_unsafe_ptrs() {
281 // Test on-stack copy-from-buf.
283 let ptr
= a
.as_ptr();
284 let b
= Vec
::from_raw_buf(ptr
, 3);
285 assert_eq
!(b
, [1, 2, 3]);
287 // Test on-heap copy-from-buf.
288 let c
= vec
![1, 2, 3, 4, 5];
289 let ptr
= c
.as_ptr();
290 let d
= Vec
::from_raw_buf(ptr
, 5);
291 assert_eq
!(d
, [1, 2, 3, 4, 5]);
296 fn test_vec_truncate_drop() {
297 static mut drops
: u32 = 0;
301 unsafe { drops += 1; }
305 let mut v
= vec
![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];
306 assert_eq
!(unsafe { drops }
, 0);
308 assert_eq
!(unsafe { drops }
, 2);
310 assert_eq
!(unsafe { drops }
, 5);
315 fn test_vec_truncate_fail() {
317 impl Drop
for BadElem
{
319 let BadElem(ref mut x
) = *self;
321 panic
!("BadElem panic: 0xbadbeef")
326 let mut v
= vec
![BadElem(1), BadElem(2), BadElem(0xbadbeef), BadElem(4)];
332 let vec
= vec
![1, 2, 3];
333 assert
!(vec
[1] == 2);
338 fn test_index_out_of_bounds() {
339 let vec
= vec
![1, 2, 3];
345 fn test_slice_out_of_bounds_1() {
346 let x
= vec
![1, 2, 3, 4, 5];
352 fn test_slice_out_of_bounds_2() {
353 let x
= vec
![1, 2, 3, 4, 5];
359 fn test_slice_out_of_bounds_3() {
360 let x
= vec
![1, 2, 3, 4, 5];
366 fn test_slice_out_of_bounds_4() {
367 let x
= vec
![1, 2, 3, 4, 5];
373 fn test_slice_out_of_bounds_5() {
374 let x
= vec
![1, 2, 3, 4, 5];
380 fn test_swap_remove_empty() {
381 let mut vec
= Vec
::<i32>::new();
386 fn test_move_iter_unwrap() {
387 let mut vec
= Vec
::with_capacity(7);
390 let ptr
= vec
.as_ptr();
391 vec
= vec
.into_iter().into_inner();
392 assert_eq
!(vec
.as_ptr(), ptr
);
393 assert_eq
!(vec
.capacity(), 7);
394 assert_eq
!(vec
.len(), 0);
399 fn test_map_in_place_incompatible_types_fail() {
400 let v
= vec
![0, 1, 2];
401 v
.map_in_place(|_
| ());
405 fn test_map_in_place() {
406 let v
= vec
![0, 1, 2];
407 assert_eq
!(v
.map_in_place(|i
: u32| i
as i32 - 1), [-1, 0, 1]);
411 fn test_map_in_place_zero_sized() {
412 let v
= vec
![(), ()];
413 #[derive(PartialEq, Debug)]
415 assert_eq
!(v
.map_in_place(|_
| ZeroSized
), [ZeroSized
, ZeroSized
]);
419 fn test_map_in_place_zero_drop_count() {
420 use std
::sync
::atomic
::{AtomicUsize, Ordering}
;
422 #[derive(Clone, PartialEq, Debug)]
424 impl Drop
for Nothing { fn drop(&mut self) { }
}
426 #[derive(Clone, PartialEq, Debug)]
428 impl Drop
for ZeroSized
{
430 DROP_COUNTER
.fetch_add(1, Ordering
::Relaxed
);
433 const NUM_ELEMENTS
: usize = 2;
434 static DROP_COUNTER
: AtomicUsize
= AtomicUsize
::new(0);
436 let v
= repeat(Nothing
).take(NUM_ELEMENTS
).collect
::<Vec
<_
>>();
438 DROP_COUNTER
.store(0, Ordering
::Relaxed
);
440 let v
= v
.map_in_place(|_
| ZeroSized
);
441 assert_eq
!(DROP_COUNTER
.load(Ordering
::Relaxed
), 0);
443 assert_eq
!(DROP_COUNTER
.load(Ordering
::Relaxed
), NUM_ELEMENTS
);
447 fn test_move_items() {
448 let vec
= vec
![1, 2, 3];
449 let mut vec2
= vec
![];
453 assert_eq
!(vec2
, [1, 2, 3]);
457 fn test_move_items_reverse() {
458 let vec
= vec
![1, 2, 3];
459 let mut vec2
= vec
![];
460 for i
in vec
.into_iter().rev() {
463 assert_eq
!(vec2
, [3, 2, 1]);
467 fn test_move_items_zero_sized() {
468 let vec
= vec
![(), (), ()];
469 let mut vec2
= vec
![];
473 assert_eq
!(vec2
, [(), (), ()]);
477 fn test_drain_items() {
478 let mut vec
= vec
![1, 2, 3];
479 let mut vec2
= vec
![];
480 for i
in vec
.drain(..) {
484 assert_eq
!(vec2
, [ 1, 2, 3 ]);
488 fn test_drain_items_reverse() {
489 let mut vec
= vec
![1, 2, 3];
490 let mut vec2
= vec
![];
491 for i
in vec
.drain(..).rev() {
495 assert_eq
!(vec2
, [3, 2, 1]);
499 fn test_drain_items_zero_sized() {
500 let mut vec
= vec
![(), (), ()];
501 let mut vec2
= vec
![];
502 for i
in vec
.drain(..) {
506 assert_eq
!(vec2
, [(), (), ()]);
511 fn test_drain_out_of_bounds() {
512 let mut v
= vec
![1, 2, 3, 4, 5];
517 fn test_drain_range() {
518 let mut v
= vec
![1, 2, 3, 4, 5];
519 for _
in v
.drain(4..) {
521 assert_eq
!(v
, &[1, 2, 3, 4]);
523 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
524 for _
in v
.drain(1..4) {
526 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
528 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
529 for _
in v
.drain(1..4).rev() {
531 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
533 let mut v
: Vec
<_
> = vec
![(); 5];
534 for _
in v
.drain(1..4).rev() {
536 assert_eq
!(v
, &[(), ()]);
540 fn test_into_boxed_slice() {
541 let xs
= vec
![1, 2, 3];
542 let ys
= xs
.into_boxed_slice();
543 assert_eq
!(&*ys
, [1, 2, 3]);
548 let mut vec
= vec
![1, 2, 3];
549 let mut vec2
= vec
![4, 5, 6];
550 vec
.append(&mut vec2
);
551 assert_eq
!(vec
, [1, 2, 3, 4, 5, 6]);
552 assert_eq
!(vec2
, []);
556 fn test_split_off() {
557 let mut vec
= vec
![1, 2, 3, 4, 5, 6];
558 let vec2
= vec
.split_off(4);
559 assert_eq
!(vec
, [1, 2, 3, 4]);
560 assert_eq
!(vec2
, [5, 6]);
564 fn test_into_iter_count() {
565 assert_eq
!(vec
![1, 2, 3].into_iter().count(), 3);
569 fn bench_new(b
: &mut Bencher
) {
571 let v
: Vec
<u32> = Vec
::new();
572 assert_eq
!(v
.len(), 0);
573 assert_eq
!(v
.capacity(), 0);
577 fn do_bench_with_capacity(b
: &mut Bencher
, src_len
: usize) {
578 b
.bytes
= src_len
as u64;
581 let v
: Vec
<u32> = Vec
::with_capacity(src_len
);
582 assert_eq
!(v
.len(), 0);
583 assert_eq
!(v
.capacity(), src_len
);
588 fn bench_with_capacity_0000(b
: &mut Bencher
) {
589 do_bench_with_capacity(b
, 0)
593 fn bench_with_capacity_0010(b
: &mut Bencher
) {
594 do_bench_with_capacity(b
, 10)
598 fn bench_with_capacity_0100(b
: &mut Bencher
) {
599 do_bench_with_capacity(b
, 100)
603 fn bench_with_capacity_1000(b
: &mut Bencher
) {
604 do_bench_with_capacity(b
, 1000)
607 fn do_bench_from_fn(b
: &mut Bencher
, src_len
: usize) {
608 b
.bytes
= src_len
as u64;
611 let dst
= (0..src_len
).collect
::<Vec
<_
>>();
612 assert_eq
!(dst
.len(), src_len
);
613 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
618 fn bench_from_fn_0000(b
: &mut Bencher
) {
619 do_bench_from_fn(b
, 0)
623 fn bench_from_fn_0010(b
: &mut Bencher
) {
624 do_bench_from_fn(b
, 10)
628 fn bench_from_fn_0100(b
: &mut Bencher
) {
629 do_bench_from_fn(b
, 100)
633 fn bench_from_fn_1000(b
: &mut Bencher
) {
634 do_bench_from_fn(b
, 1000)
637 fn do_bench_from_elem(b
: &mut Bencher
, src_len
: usize) {
638 b
.bytes
= src_len
as u64;
641 let dst
: Vec
<usize> = repeat(5).take(src_len
).collect();
642 assert_eq
!(dst
.len(), src_len
);
643 assert
!(dst
.iter().all(|x
| *x
== 5));
648 fn bench_from_elem_0000(b
: &mut Bencher
) {
649 do_bench_from_elem(b
, 0)
653 fn bench_from_elem_0010(b
: &mut Bencher
) {
654 do_bench_from_elem(b
, 10)
658 fn bench_from_elem_0100(b
: &mut Bencher
) {
659 do_bench_from_elem(b
, 100)
663 fn bench_from_elem_1000(b
: &mut Bencher
) {
664 do_bench_from_elem(b
, 1000)
667 fn do_bench_from_slice(b
: &mut Bencher
, src_len
: usize) {
668 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
670 b
.bytes
= src_len
as u64;
673 let dst
= src
.clone()[..].to_vec();
674 assert_eq
!(dst
.len(), src_len
);
675 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
680 fn bench_from_slice_0000(b
: &mut Bencher
) {
681 do_bench_from_slice(b
, 0)
685 fn bench_from_slice_0010(b
: &mut Bencher
) {
686 do_bench_from_slice(b
, 10)
690 fn bench_from_slice_0100(b
: &mut Bencher
) {
691 do_bench_from_slice(b
, 100)
695 fn bench_from_slice_1000(b
: &mut Bencher
) {
696 do_bench_from_slice(b
, 1000)
699 fn do_bench_from_iter(b
: &mut Bencher
, src_len
: usize) {
700 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
702 b
.bytes
= src_len
as u64;
705 let dst
: Vec
<_
> = FromIterator
::from_iter(src
.clone());
706 assert_eq
!(dst
.len(), src_len
);
707 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
712 fn bench_from_iter_0000(b
: &mut Bencher
) {
713 do_bench_from_iter(b
, 0)
717 fn bench_from_iter_0010(b
: &mut Bencher
) {
718 do_bench_from_iter(b
, 10)
722 fn bench_from_iter_0100(b
: &mut Bencher
) {
723 do_bench_from_iter(b
, 100)
727 fn bench_from_iter_1000(b
: &mut Bencher
) {
728 do_bench_from_iter(b
, 1000)
731 fn do_bench_extend(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
732 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
733 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
735 b
.bytes
= src_len
as u64;
738 let mut dst
= dst
.clone();
739 dst
.extend(src
.clone());
740 assert_eq
!(dst
.len(), dst_len
+ src_len
);
741 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
746 fn bench_extend_0000_0000(b
: &mut Bencher
) {
747 do_bench_extend(b
, 0, 0)
751 fn bench_extend_0000_0010(b
: &mut Bencher
) {
752 do_bench_extend(b
, 0, 10)
756 fn bench_extend_0000_0100(b
: &mut Bencher
) {
757 do_bench_extend(b
, 0, 100)
761 fn bench_extend_0000_1000(b
: &mut Bencher
) {
762 do_bench_extend(b
, 0, 1000)
766 fn bench_extend_0010_0010(b
: &mut Bencher
) {
767 do_bench_extend(b
, 10, 10)
771 fn bench_extend_0100_0100(b
: &mut Bencher
) {
772 do_bench_extend(b
, 100, 100)
776 fn bench_extend_1000_1000(b
: &mut Bencher
) {
777 do_bench_extend(b
, 1000, 1000)
780 fn do_bench_push_all(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
781 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
782 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
784 b
.bytes
= src_len
as u64;
787 let mut dst
= dst
.clone();
789 assert_eq
!(dst
.len(), dst_len
+ src_len
);
790 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
795 fn bench_push_all_0000_0000(b
: &mut Bencher
) {
796 do_bench_push_all(b
, 0, 0)
800 fn bench_push_all_0000_0010(b
: &mut Bencher
) {
801 do_bench_push_all(b
, 0, 10)
805 fn bench_push_all_0000_0100(b
: &mut Bencher
) {
806 do_bench_push_all(b
, 0, 100)
810 fn bench_push_all_0000_1000(b
: &mut Bencher
) {
811 do_bench_push_all(b
, 0, 1000)
815 fn bench_push_all_0010_0010(b
: &mut Bencher
) {
816 do_bench_push_all(b
, 10, 10)
820 fn bench_push_all_0100_0100(b
: &mut Bencher
) {
821 do_bench_push_all(b
, 100, 100)
825 fn bench_push_all_1000_1000(b
: &mut Bencher
) {
826 do_bench_push_all(b
, 1000, 1000)
829 fn do_bench_push_all_move(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
830 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
831 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
833 b
.bytes
= src_len
as u64;
836 let mut dst
= dst
.clone();
837 dst
.extend(src
.clone());
838 assert_eq
!(dst
.len(), dst_len
+ src_len
);
839 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
844 fn bench_push_all_move_0000_0000(b
: &mut Bencher
) {
845 do_bench_push_all_move(b
, 0, 0)
849 fn bench_push_all_move_0000_0010(b
: &mut Bencher
) {
850 do_bench_push_all_move(b
, 0, 10)
854 fn bench_push_all_move_0000_0100(b
: &mut Bencher
) {
855 do_bench_push_all_move(b
, 0, 100)
859 fn bench_push_all_move_0000_1000(b
: &mut Bencher
) {
860 do_bench_push_all_move(b
, 0, 1000)
864 fn bench_push_all_move_0010_0010(b
: &mut Bencher
) {
865 do_bench_push_all_move(b
, 10, 10)
869 fn bench_push_all_move_0100_0100(b
: &mut Bencher
) {
870 do_bench_push_all_move(b
, 100, 100)
874 fn bench_push_all_move_1000_1000(b
: &mut Bencher
) {
875 do_bench_push_all_move(b
, 1000, 1000)
878 fn do_bench_clone(b
: &mut Bencher
, src_len
: usize) {
879 let src
: Vec
<usize> = FromIterator
::from_iter(0..src_len
);
881 b
.bytes
= src_len
as u64;
884 let dst
= src
.clone();
885 assert_eq
!(dst
.len(), src_len
);
886 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
891 fn bench_clone_0000(b
: &mut Bencher
) {
896 fn bench_clone_0010(b
: &mut Bencher
) {
897 do_bench_clone(b
, 10)
901 fn bench_clone_0100(b
: &mut Bencher
) {
902 do_bench_clone(b
, 100)
906 fn bench_clone_1000(b
: &mut Bencher
) {
907 do_bench_clone(b
, 1000)
910 fn do_bench_clone_from(b
: &mut Bencher
, times
: usize, dst_len
: usize, src_len
: usize) {
911 let dst
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
912 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
914 b
.bytes
= (times
* src_len
) as u64;
917 let mut dst
= dst
.clone();
920 dst
.clone_from(&src
);
922 assert_eq
!(dst
.len(), src_len
);
923 assert
!(dst
.iter().enumerate().all(|(i
, x
)| dst_len
+ i
== *x
));
929 fn bench_clone_from_01_0000_0000(b
: &mut Bencher
) {
930 do_bench_clone_from(b
, 1, 0, 0)
934 fn bench_clone_from_01_0000_0010(b
: &mut Bencher
) {
935 do_bench_clone_from(b
, 1, 0, 10)
939 fn bench_clone_from_01_0000_0100(b
: &mut Bencher
) {
940 do_bench_clone_from(b
, 1, 0, 100)
944 fn bench_clone_from_01_0000_1000(b
: &mut Bencher
) {
945 do_bench_clone_from(b
, 1, 0, 1000)
949 fn bench_clone_from_01_0010_0010(b
: &mut Bencher
) {
950 do_bench_clone_from(b
, 1, 10, 10)
954 fn bench_clone_from_01_0100_0100(b
: &mut Bencher
) {
955 do_bench_clone_from(b
, 1, 100, 100)
959 fn bench_clone_from_01_1000_1000(b
: &mut Bencher
) {
960 do_bench_clone_from(b
, 1, 1000, 1000)
964 fn bench_clone_from_01_0010_0100(b
: &mut Bencher
) {
965 do_bench_clone_from(b
, 1, 10, 100)
969 fn bench_clone_from_01_0100_1000(b
: &mut Bencher
) {
970 do_bench_clone_from(b
, 1, 100, 1000)
974 fn bench_clone_from_01_0010_0000(b
: &mut Bencher
) {
975 do_bench_clone_from(b
, 1, 10, 0)
979 fn bench_clone_from_01_0100_0010(b
: &mut Bencher
) {
980 do_bench_clone_from(b
, 1, 100, 10)
984 fn bench_clone_from_01_1000_0100(b
: &mut Bencher
) {
985 do_bench_clone_from(b
, 1, 1000, 100)
989 fn bench_clone_from_10_0000_0000(b
: &mut Bencher
) {
990 do_bench_clone_from(b
, 10, 0, 0)
994 fn bench_clone_from_10_0000_0010(b
: &mut Bencher
) {
995 do_bench_clone_from(b
, 10, 0, 10)
999 fn bench_clone_from_10_0000_0100(b
: &mut Bencher
) {
1000 do_bench_clone_from(b
, 10, 0, 100)
1004 fn bench_clone_from_10_0000_1000(b
: &mut Bencher
) {
1005 do_bench_clone_from(b
, 10, 0, 1000)
1009 fn bench_clone_from_10_0010_0010(b
: &mut Bencher
) {
1010 do_bench_clone_from(b
, 10, 10, 10)
1014 fn bench_clone_from_10_0100_0100(b
: &mut Bencher
) {
1015 do_bench_clone_from(b
, 10, 100, 100)
1019 fn bench_clone_from_10_1000_1000(b
: &mut Bencher
) {
1020 do_bench_clone_from(b
, 10, 1000, 1000)
1024 fn bench_clone_from_10_0010_0100(b
: &mut Bencher
) {
1025 do_bench_clone_from(b
, 10, 10, 100)
1029 fn bench_clone_from_10_0100_1000(b
: &mut Bencher
) {
1030 do_bench_clone_from(b
, 10, 100, 1000)
1034 fn bench_clone_from_10_0010_0000(b
: &mut Bencher
) {
1035 do_bench_clone_from(b
, 10, 10, 0)
1039 fn bench_clone_from_10_0100_0010(b
: &mut Bencher
) {
1040 do_bench_clone_from(b
, 10, 100, 10)
1044 fn bench_clone_from_10_1000_0100(b
: &mut Bencher
) {
1045 do_bench_clone_from(b
, 10, 1000, 100)