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.
12 use std
::iter
::{FromIterator, repeat}
;
13 use std
::mem
::size_of
;
14 use std
::vec
::{Drain, IntoIter}
;
18 struct DropCounter
<'a
> {
22 impl<'a
> Drop
for DropCounter
<'a
> {
29 fn test_small_vec_struct() {
30 assert
!(size_of
::<Vec
<u8>>() == size_of
::<usize>() * 3);
34 fn test_double_drop() {
40 let (mut count_x
, mut count_y
) = (0, 0);
46 tv
.x
.push(DropCounter { count: &mut count_x }
);
47 tv
.y
.push(DropCounter { count: &mut count_y }
);
49 // If Vec had a drop flag, here is where it would be zeroed.
50 // Instead, it should rely on its internal state to prevent
51 // doing anything significant when dropped multiple times.
54 // Here tv goes out of scope, tv.y should be dropped, but not tv.x.
57 assert_eq
!(count_x
, 1);
58 assert_eq
!(count_y
, 1);
63 let mut v
= Vec
::new();
64 assert_eq
!(v
.capacity(), 0);
67 assert
!(v
.capacity() >= 2);
73 assert
!(v
.capacity() >= 16);
75 assert
!(v
.capacity() >= 32);
80 assert
!(v
.capacity() >= 33)
85 let mut v
= Vec
::new();
86 let mut w
= Vec
::new();
102 v
.extend(w
.clone()); // specializes to `append`
103 assert
!(v
.iter().eq(w
.iter().chain(w
.iter())));
107 fn test_extend_ref() {
108 let mut v
= vec
![1, 2];
109 v
.extend(&[3, 4, 5]);
111 assert_eq
!(v
.len(), 5);
112 assert_eq
!(v
, [1, 2, 3, 4, 5]);
117 assert_eq
!(v
.len(), 7);
118 assert_eq
!(v
, [1, 2, 3, 4, 5, 6, 7]);
122 fn test_slice_from_mut() {
123 let mut values
= vec
![1, 2, 3, 4, 5];
125 let slice
= &mut values
[2..];
126 assert
!(slice
== [3, 4, 5]);
132 assert
!(values
== [1, 2, 5, 6, 7]);
136 fn test_slice_to_mut() {
137 let mut values
= vec
![1, 2, 3, 4, 5];
139 let slice
= &mut values
[..2];
140 assert
!(slice
== [1, 2]);
146 assert
!(values
== [2, 3, 3, 4, 5]);
150 fn test_split_at_mut() {
151 let mut values
= vec
![1, 2, 3, 4, 5];
153 let (left
, right
) = values
.split_at_mut(2);
155 let left
: &[_
] = left
;
156 assert
!(&left
[..left
.len()] == &[1, 2]);
163 let right
: &[_
] = right
;
164 assert
!(&right
[..right
.len()] == &[3, 4, 5]);
171 assert_eq
!(values
, [2, 3, 5, 6, 7]);
176 let v
: Vec
<i32> = vec
![];
177 let w
= vec
![1, 2, 3];
179 assert_eq
!(v
, v
.clone());
183 // they should be disjoint in memory.
184 assert
!(w
.as_ptr() != z
.as_ptr())
188 fn test_clone_from() {
190 let three
: Vec
<Box
<_
>> = vec
![box 1, box 2, box 3];
191 let two
: Vec
<Box
<_
>> = vec
![box 4, box 5];
193 v
.clone_from(&three
);
194 assert_eq
!(v
, three
);
197 v
.clone_from(&three
);
198 assert_eq
!(v
, three
);
205 v
.clone_from(&three
);
211 let mut vec
= vec
![1, 2, 3, 4];
212 vec
.retain(|&x
| x
% 2 == 0);
213 assert_eq
!(vec
, [2, 4]);
217 fn zero_sized_values() {
218 let mut v
= Vec
::new();
219 assert_eq
!(v
.len(), 0);
221 assert_eq
!(v
.len(), 1);
223 assert_eq
!(v
.len(), 2);
224 assert_eq
!(v
.pop(), Some(()));
225 assert_eq
!(v
.pop(), Some(()));
226 assert_eq
!(v
.pop(), None
);
228 assert_eq
!(v
.iter().count(), 0);
230 assert_eq
!(v
.iter().count(), 1);
232 assert_eq
!(v
.iter().count(), 2);
236 assert_eq
!(v
.iter_mut().count(), 2);
238 assert_eq
!(v
.iter_mut().count(), 3);
240 assert_eq
!(v
.iter_mut().count(), 4);
242 for &mut () in &mut v {}
246 assert_eq
!(v
.iter_mut().count(), 0);
250 fn test_partition() {
251 assert_eq
!(vec
![].into_iter().partition(|x
: &i32| *x
< 3),
253 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 4),
254 (vec
![1, 2, 3], vec
![]));
255 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 2),
256 (vec
![1], vec
![2, 3]));
257 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 0),
258 (vec
![], vec
![1, 2, 3]));
262 fn test_zip_unzip() {
263 let z1
= vec
![(1, 4), (2, 5), (3, 6)];
265 let (left
, right
): (Vec
<_
>, Vec
<_
>) = z1
.iter().cloned().unzip();
267 assert_eq
!((1, 4), (left
[0], right
[0]));
268 assert_eq
!((2, 5), (left
[1], right
[1]));
269 assert_eq
!((3, 6), (left
[2], right
[2]));
273 fn test_vec_truncate_drop() {
274 static mut drops
: u32 = 0;
284 let mut v
= vec
![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];
285 assert_eq
!(unsafe { drops }
, 0);
287 assert_eq
!(unsafe { drops }
, 2);
289 assert_eq
!(unsafe { drops }
, 5);
294 fn test_vec_truncate_fail() {
296 impl Drop
for BadElem
{
298 let BadElem(ref mut x
) = *self;
300 panic
!("BadElem panic: 0xbadbeef")
305 let mut v
= vec
![BadElem(1), BadElem(2), BadElem(0xbadbeef), BadElem(4)];
311 let vec
= vec
![1, 2, 3];
312 assert
!(vec
[1] == 2);
317 fn test_index_out_of_bounds() {
318 let vec
= vec
![1, 2, 3];
324 fn test_slice_out_of_bounds_1() {
325 let x
= vec
![1, 2, 3, 4, 5];
331 fn test_slice_out_of_bounds_2() {
332 let x
= vec
![1, 2, 3, 4, 5];
338 fn test_slice_out_of_bounds_3() {
339 let x
= vec
![1, 2, 3, 4, 5];
345 fn test_slice_out_of_bounds_4() {
346 let x
= vec
![1, 2, 3, 4, 5];
352 fn test_slice_out_of_bounds_5() {
353 let x
= vec
![1, 2, 3, 4, 5];
359 fn test_swap_remove_empty() {
360 let mut vec
= Vec
::<i32>::new();
365 fn test_move_items() {
366 let vec
= vec
![1, 2, 3];
367 let mut vec2
= vec
![];
371 assert_eq
!(vec2
, [1, 2, 3]);
375 fn test_move_items_reverse() {
376 let vec
= vec
![1, 2, 3];
377 let mut vec2
= vec
![];
378 for i
in vec
.into_iter().rev() {
381 assert_eq
!(vec2
, [3, 2, 1]);
385 fn test_move_items_zero_sized() {
386 let vec
= vec
![(), (), ()];
387 let mut vec2
= vec
![];
391 assert_eq
!(vec2
, [(), (), ()]);
395 fn test_drain_items() {
396 let mut vec
= vec
![1, 2, 3];
397 let mut vec2
= vec
![];
398 for i
in vec
.drain(..) {
402 assert_eq
!(vec2
, [1, 2, 3]);
406 fn test_drain_items_reverse() {
407 let mut vec
= vec
![1, 2, 3];
408 let mut vec2
= vec
![];
409 for i
in vec
.drain(..).rev() {
413 assert_eq
!(vec2
, [3, 2, 1]);
417 fn test_drain_items_zero_sized() {
418 let mut vec
= vec
![(), (), ()];
419 let mut vec2
= vec
![];
420 for i
in vec
.drain(..) {
424 assert_eq
!(vec2
, [(), (), ()]);
429 fn test_drain_out_of_bounds() {
430 let mut v
= vec
![1, 2, 3, 4, 5];
435 fn test_drain_range() {
436 let mut v
= vec
![1, 2, 3, 4, 5];
437 for _
in v
.drain(4..) {
439 assert_eq
!(v
, &[1, 2, 3, 4]);
441 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
442 for _
in v
.drain(1..4) {
444 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
446 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
447 for _
in v
.drain(1..4).rev() {
449 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
451 let mut v
: Vec
<_
> = vec
![(); 5];
452 for _
in v
.drain(1..4).rev() {
454 assert_eq
!(v
, &[(), ()]);
458 fn test_into_boxed_slice() {
459 let xs
= vec
![1, 2, 3];
460 let ys
= xs
.into_boxed_slice();
461 assert_eq
!(&*ys
, [1, 2, 3]);
466 let mut vec
= vec
![1, 2, 3];
467 let mut vec2
= vec
![4, 5, 6];
468 vec
.append(&mut vec2
);
469 assert_eq
!(vec
, [1, 2, 3, 4, 5, 6]);
470 assert_eq
!(vec2
, []);
474 fn test_split_off() {
475 let mut vec
= vec
![1, 2, 3, 4, 5, 6];
476 let vec2
= vec
.split_off(4);
477 assert_eq
!(vec
, [1, 2, 3, 4]);
478 assert_eq
!(vec2
, [5, 6]);
482 fn test_into_iter_as_slice() {
483 let vec
= vec
!['a'
, 'b'
, 'c'
];
484 let mut into_iter
= vec
.into_iter();
485 assert_eq
!(into_iter
.as_slice(), &['a'
, 'b'
, 'c'
]);
486 let _
= into_iter
.next().unwrap();
487 assert_eq
!(into_iter
.as_slice(), &['b'
, 'c'
]);
488 let _
= into_iter
.next().unwrap();
489 let _
= into_iter
.next().unwrap();
490 assert_eq
!(into_iter
.as_slice(), &[]);
494 fn test_into_iter_as_mut_slice() {
495 let vec
= vec
!['a'
, 'b'
, 'c'
];
496 let mut into_iter
= vec
.into_iter();
497 assert_eq
!(into_iter
.as_slice(), &['a'
, 'b'
, 'c'
]);
498 into_iter
.as_mut_slice()[0] = 'x'
;
499 into_iter
.as_mut_slice()[1] = 'y'
;
500 assert_eq
!(into_iter
.next().unwrap(), 'x'
);
501 assert_eq
!(into_iter
.as_slice(), &['y'
, 'c'
]);
505 fn test_into_iter_count() {
506 assert_eq
!(vec
![1, 2, 3].into_iter().count(), 3);
510 fn test_into_iter_clone() {
511 fn iter_equal
<I
: Iterator
<Item
= i32>>(it
: I
, slice
: &[i32]) {
512 let v
: Vec
<i32> = it
.collect();
513 assert_eq
!(&v
[..], slice
);
515 let mut it
= vec
![1, 2, 3].into_iter();
516 iter_equal(it
.clone(), &[1, 2, 3]);
517 assert_eq
!(it
.next(), Some(1));
518 let mut it
= it
.rev();
519 iter_equal(it
.clone(), &[3, 2]);
520 assert_eq
!(it
.next(), Some(3));
521 iter_equal(it
.clone(), &[2]);
522 assert_eq
!(it
.next(), Some(2));
523 iter_equal(it
.clone(), &[]);
524 assert_eq
!(it
.next(), None
);
529 let borrowed
: &[_
] = &["borrowed", "(slice)"];
530 let owned
= vec
!["owned", "(vec)"];
531 match (Cow
::from(owned
.clone()), Cow
::from(borrowed
)) {
532 (Cow
::Owned(o
), Cow
::Borrowed(b
)) => assert
!(o
== owned
&& b
== borrowed
),
533 _
=> panic
!("invalid `Cow::from`"),
538 fn assert_covariance() {
539 fn drain
<'new
>(d
: Drain
<'
static, &'
static str>) -> Drain
<'new
, &'new
str> { d }
540 fn into_iter
<'new
>(i
: IntoIter
<&'
static str>) -> IntoIter
<&'new
str> { i }
544 fn bench_new(b
: &mut Bencher
) {
546 let v
: Vec
<u32> = Vec
::new();
547 assert_eq
!(v
.len(), 0);
548 assert_eq
!(v
.capacity(), 0);
552 fn do_bench_with_capacity(b
: &mut Bencher
, src_len
: usize) {
553 b
.bytes
= src_len
as u64;
556 let v
: Vec
<u32> = Vec
::with_capacity(src_len
);
557 assert_eq
!(v
.len(), 0);
558 assert_eq
!(v
.capacity(), src_len
);
563 fn bench_with_capacity_0000(b
: &mut Bencher
) {
564 do_bench_with_capacity(b
, 0)
568 fn bench_with_capacity_0010(b
: &mut Bencher
) {
569 do_bench_with_capacity(b
, 10)
573 fn bench_with_capacity_0100(b
: &mut Bencher
) {
574 do_bench_with_capacity(b
, 100)
578 fn bench_with_capacity_1000(b
: &mut Bencher
) {
579 do_bench_with_capacity(b
, 1000)
582 fn do_bench_from_fn(b
: &mut Bencher
, src_len
: usize) {
583 b
.bytes
= src_len
as u64;
586 let dst
= (0..src_len
).collect
::<Vec
<_
>>();
587 assert_eq
!(dst
.len(), src_len
);
588 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
593 fn bench_from_fn_0000(b
: &mut Bencher
) {
594 do_bench_from_fn(b
, 0)
598 fn bench_from_fn_0010(b
: &mut Bencher
) {
599 do_bench_from_fn(b
, 10)
603 fn bench_from_fn_0100(b
: &mut Bencher
) {
604 do_bench_from_fn(b
, 100)
608 fn bench_from_fn_1000(b
: &mut Bencher
) {
609 do_bench_from_fn(b
, 1000)
612 fn do_bench_from_elem(b
: &mut Bencher
, src_len
: usize) {
613 b
.bytes
= src_len
as u64;
616 let dst
: Vec
<usize> = repeat(5).take(src_len
).collect();
617 assert_eq
!(dst
.len(), src_len
);
618 assert
!(dst
.iter().all(|x
| *x
== 5));
623 fn bench_from_elem_0000(b
: &mut Bencher
) {
624 do_bench_from_elem(b
, 0)
628 fn bench_from_elem_0010(b
: &mut Bencher
) {
629 do_bench_from_elem(b
, 10)
633 fn bench_from_elem_0100(b
: &mut Bencher
) {
634 do_bench_from_elem(b
, 100)
638 fn bench_from_elem_1000(b
: &mut Bencher
) {
639 do_bench_from_elem(b
, 1000)
642 fn do_bench_from_slice(b
: &mut Bencher
, src_len
: usize) {
643 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
645 b
.bytes
= src_len
as u64;
648 let dst
= src
.clone()[..].to_vec();
649 assert_eq
!(dst
.len(), src_len
);
650 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
655 fn bench_from_slice_0000(b
: &mut Bencher
) {
656 do_bench_from_slice(b
, 0)
660 fn bench_from_slice_0010(b
: &mut Bencher
) {
661 do_bench_from_slice(b
, 10)
665 fn bench_from_slice_0100(b
: &mut Bencher
) {
666 do_bench_from_slice(b
, 100)
670 fn bench_from_slice_1000(b
: &mut Bencher
) {
671 do_bench_from_slice(b
, 1000)
674 fn do_bench_from_iter(b
: &mut Bencher
, src_len
: usize) {
675 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
677 b
.bytes
= src_len
as u64;
680 let dst
: Vec
<_
> = FromIterator
::from_iter(src
.clone());
681 assert_eq
!(dst
.len(), src_len
);
682 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
687 fn bench_from_iter_0000(b
: &mut Bencher
) {
688 do_bench_from_iter(b
, 0)
692 fn bench_from_iter_0010(b
: &mut Bencher
) {
693 do_bench_from_iter(b
, 10)
697 fn bench_from_iter_0100(b
: &mut Bencher
) {
698 do_bench_from_iter(b
, 100)
702 fn bench_from_iter_1000(b
: &mut Bencher
) {
703 do_bench_from_iter(b
, 1000)
706 fn do_bench_extend(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
707 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
708 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
710 b
.bytes
= src_len
as u64;
713 let mut dst
= dst
.clone();
714 dst
.extend(src
.clone());
715 assert_eq
!(dst
.len(), dst_len
+ src_len
);
716 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
721 fn bench_extend_0000_0000(b
: &mut Bencher
) {
722 do_bench_extend(b
, 0, 0)
726 fn bench_extend_0000_0010(b
: &mut Bencher
) {
727 do_bench_extend(b
, 0, 10)
731 fn bench_extend_0000_0100(b
: &mut Bencher
) {
732 do_bench_extend(b
, 0, 100)
736 fn bench_extend_0000_1000(b
: &mut Bencher
) {
737 do_bench_extend(b
, 0, 1000)
741 fn bench_extend_0010_0010(b
: &mut Bencher
) {
742 do_bench_extend(b
, 10, 10)
746 fn bench_extend_0100_0100(b
: &mut Bencher
) {
747 do_bench_extend(b
, 100, 100)
751 fn bench_extend_1000_1000(b
: &mut Bencher
) {
752 do_bench_extend(b
, 1000, 1000)
755 fn do_bench_push_all(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
756 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
757 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
759 b
.bytes
= src_len
as u64;
762 let mut dst
= dst
.clone();
763 dst
.extend_from_slice(&src
);
764 assert_eq
!(dst
.len(), dst_len
+ src_len
);
765 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
770 fn bench_push_all_0000_0000(b
: &mut Bencher
) {
771 do_bench_push_all(b
, 0, 0)
775 fn bench_push_all_0000_0010(b
: &mut Bencher
) {
776 do_bench_push_all(b
, 0, 10)
780 fn bench_push_all_0000_0100(b
: &mut Bencher
) {
781 do_bench_push_all(b
, 0, 100)
785 fn bench_push_all_0000_1000(b
: &mut Bencher
) {
786 do_bench_push_all(b
, 0, 1000)
790 fn bench_push_all_0010_0010(b
: &mut Bencher
) {
791 do_bench_push_all(b
, 10, 10)
795 fn bench_push_all_0100_0100(b
: &mut Bencher
) {
796 do_bench_push_all(b
, 100, 100)
800 fn bench_push_all_1000_1000(b
: &mut Bencher
) {
801 do_bench_push_all(b
, 1000, 1000)
804 fn do_bench_push_all_move(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
805 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
806 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
808 b
.bytes
= src_len
as u64;
811 let mut dst
= dst
.clone();
812 dst
.extend(src
.clone());
813 assert_eq
!(dst
.len(), dst_len
+ src_len
);
814 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
819 fn bench_push_all_move_0000_0000(b
: &mut Bencher
) {
820 do_bench_push_all_move(b
, 0, 0)
824 fn bench_push_all_move_0000_0010(b
: &mut Bencher
) {
825 do_bench_push_all_move(b
, 0, 10)
829 fn bench_push_all_move_0000_0100(b
: &mut Bencher
) {
830 do_bench_push_all_move(b
, 0, 100)
834 fn bench_push_all_move_0000_1000(b
: &mut Bencher
) {
835 do_bench_push_all_move(b
, 0, 1000)
839 fn bench_push_all_move_0010_0010(b
: &mut Bencher
) {
840 do_bench_push_all_move(b
, 10, 10)
844 fn bench_push_all_move_0100_0100(b
: &mut Bencher
) {
845 do_bench_push_all_move(b
, 100, 100)
849 fn bench_push_all_move_1000_1000(b
: &mut Bencher
) {
850 do_bench_push_all_move(b
, 1000, 1000)
853 fn do_bench_clone(b
: &mut Bencher
, src_len
: usize) {
854 let src
: Vec
<usize> = FromIterator
::from_iter(0..src_len
);
856 b
.bytes
= src_len
as u64;
859 let dst
= src
.clone();
860 assert_eq
!(dst
.len(), src_len
);
861 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
866 fn bench_clone_0000(b
: &mut Bencher
) {
871 fn bench_clone_0010(b
: &mut Bencher
) {
872 do_bench_clone(b
, 10)
876 fn bench_clone_0100(b
: &mut Bencher
) {
877 do_bench_clone(b
, 100)
881 fn bench_clone_1000(b
: &mut Bencher
) {
882 do_bench_clone(b
, 1000)
885 fn do_bench_clone_from(b
: &mut Bencher
, times
: usize, dst_len
: usize, src_len
: usize) {
886 let dst
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
887 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
889 b
.bytes
= (times
* src_len
) as u64;
892 let mut dst
= dst
.clone();
895 dst
.clone_from(&src
);
897 assert_eq
!(dst
.len(), src_len
);
898 assert
!(dst
.iter().enumerate().all(|(i
, x
)| dst_len
+ i
== *x
));
904 fn bench_clone_from_01_0000_0000(b
: &mut Bencher
) {
905 do_bench_clone_from(b
, 1, 0, 0)
909 fn bench_clone_from_01_0000_0010(b
: &mut Bencher
) {
910 do_bench_clone_from(b
, 1, 0, 10)
914 fn bench_clone_from_01_0000_0100(b
: &mut Bencher
) {
915 do_bench_clone_from(b
, 1, 0, 100)
919 fn bench_clone_from_01_0000_1000(b
: &mut Bencher
) {
920 do_bench_clone_from(b
, 1, 0, 1000)
924 fn bench_clone_from_01_0010_0010(b
: &mut Bencher
) {
925 do_bench_clone_from(b
, 1, 10, 10)
929 fn bench_clone_from_01_0100_0100(b
: &mut Bencher
) {
930 do_bench_clone_from(b
, 1, 100, 100)
934 fn bench_clone_from_01_1000_1000(b
: &mut Bencher
) {
935 do_bench_clone_from(b
, 1, 1000, 1000)
939 fn bench_clone_from_01_0010_0100(b
: &mut Bencher
) {
940 do_bench_clone_from(b
, 1, 10, 100)
944 fn bench_clone_from_01_0100_1000(b
: &mut Bencher
) {
945 do_bench_clone_from(b
, 1, 100, 1000)
949 fn bench_clone_from_01_0010_0000(b
: &mut Bencher
) {
950 do_bench_clone_from(b
, 1, 10, 0)
954 fn bench_clone_from_01_0100_0010(b
: &mut Bencher
) {
955 do_bench_clone_from(b
, 1, 100, 10)
959 fn bench_clone_from_01_1000_0100(b
: &mut Bencher
) {
960 do_bench_clone_from(b
, 1, 1000, 100)
964 fn bench_clone_from_10_0000_0000(b
: &mut Bencher
) {
965 do_bench_clone_from(b
, 10, 0, 0)
969 fn bench_clone_from_10_0000_0010(b
: &mut Bencher
) {
970 do_bench_clone_from(b
, 10, 0, 10)
974 fn bench_clone_from_10_0000_0100(b
: &mut Bencher
) {
975 do_bench_clone_from(b
, 10, 0, 100)
979 fn bench_clone_from_10_0000_1000(b
: &mut Bencher
) {
980 do_bench_clone_from(b
, 10, 0, 1000)
984 fn bench_clone_from_10_0010_0010(b
: &mut Bencher
) {
985 do_bench_clone_from(b
, 10, 10, 10)
989 fn bench_clone_from_10_0100_0100(b
: &mut Bencher
) {
990 do_bench_clone_from(b
, 10, 100, 100)
994 fn bench_clone_from_10_1000_1000(b
: &mut Bencher
) {
995 do_bench_clone_from(b
, 10, 1000, 1000)
999 fn bench_clone_from_10_0010_0100(b
: &mut Bencher
) {
1000 do_bench_clone_from(b
, 10, 10, 100)
1004 fn bench_clone_from_10_0100_1000(b
: &mut Bencher
) {
1005 do_bench_clone_from(b
, 10, 100, 1000)
1009 fn bench_clone_from_10_0010_0000(b
: &mut Bencher
) {
1010 do_bench_clone_from(b
, 10, 10, 0)
1014 fn bench_clone_from_10_0100_0010(b
: &mut Bencher
) {
1015 do_bench_clone_from(b
, 10, 100, 10)
1019 fn bench_clone_from_10_1000_0100(b
: &mut Bencher
) {
1020 do_bench_clone_from(b
, 10, 1000, 100)