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
;
17 struct DropCounter
<'a
> {
21 impl<'a
> Drop
for DropCounter
<'a
> {
29 let xs
= [1u8, 2u8, 3u8];
30 assert_eq
!(&**as_vec(&xs
), xs
);
34 fn test_as_vec_dtor() {
35 let (mut count_x
, mut count_y
) = (0, 0);
37 let xs
= &[DropCounter { count: &mut count_x }
, DropCounter { count: &mut count_y }
];
38 assert_eq
!(as_vec(xs
).len(), 2);
40 assert_eq
!(count_x
, 1);
41 assert_eq
!(count_y
, 1);
45 fn test_small_vec_struct() {
46 assert
!(size_of
::<Vec
<u8>>() == size_of
::<usize>() * 3);
50 fn test_double_drop() {
56 let (mut count_x
, mut count_y
) = (0, 0);
62 tv
.x
.push(DropCounter {count: &mut count_x}
);
63 tv
.y
.push(DropCounter {count: &mut count_y}
);
65 // If Vec had a drop flag, here is where it would be zeroed.
66 // Instead, it should rely on its internal state to prevent
67 // doing anything significant when dropped multiple times.
70 // Here tv goes out of scope, tv.y should be dropped, but not tv.x.
73 assert_eq
!(count_x
, 1);
74 assert_eq
!(count_y
, 1);
79 let mut v
= Vec
::new();
80 assert_eq
!(v
.capacity(), 0);
83 assert
!(v
.capacity() >= 2);
89 assert
!(v
.capacity() >= 16);
91 assert
!(v
.capacity() >= 32);
96 assert
!(v
.capacity() >= 33)
101 let mut v
= Vec
::new();
102 let mut w
= Vec
::new();
105 for i
in 0..3 { w.push(i) }
110 for i
in 3..10 { w.push(i) }
116 fn test_slice_from_mut() {
117 let mut values
= vec
![1, 2, 3, 4, 5];
119 let slice
= &mut values
[2 ..];
120 assert
!(slice
== [3, 4, 5]);
126 assert
!(values
== [1, 2, 5, 6, 7]);
130 fn test_slice_to_mut() {
131 let mut values
= vec
![1, 2, 3, 4, 5];
133 let slice
= &mut values
[.. 2];
134 assert
!(slice
== [1, 2]);
140 assert
!(values
== [2, 3, 3, 4, 5]);
144 fn test_split_at_mut() {
145 let mut values
= vec
![1, 2, 3, 4, 5];
147 let (left
, right
) = values
.split_at_mut(2);
149 let left
: &[_
] = left
;
150 assert
!(&left
[..left
.len()] == &[1, 2]);
157 let right
: &[_
] = right
;
158 assert
!(&right
[..right
.len()] == &[3, 4, 5]);
165 assert_eq
!(values
, [2, 3, 5, 6, 7]);
170 let v
: Vec
<i32> = vec
![];
171 let w
= vec
!(1, 2, 3);
173 assert_eq
!(v
, v
.clone());
177 // they should be disjoint in memory.
178 assert
!(w
.as_ptr() != z
.as_ptr())
182 fn test_clone_from() {
184 let three
: Vec
<Box
<_
>> = vec
!(box 1, box 2, box 3);
185 let two
: Vec
<Box
<_
>> = vec
!(box 4, box 5);
187 v
.clone_from(&three
);
188 assert_eq
!(v
, three
);
191 v
.clone_from(&three
);
192 assert_eq
!(v
, three
);
199 v
.clone_from(&three
);
205 let mut vec
= vec
![1, 2, 3, 4];
206 vec
.retain(|&x
| x
% 2 == 0);
207 assert_eq
!(vec
, [2, 4]);
211 fn zero_sized_values() {
212 let mut v
= Vec
::new();
213 assert_eq
!(v
.len(), 0);
215 assert_eq
!(v
.len(), 1);
217 assert_eq
!(v
.len(), 2);
218 assert_eq
!(v
.pop(), Some(()));
219 assert_eq
!(v
.pop(), Some(()));
220 assert_eq
!(v
.pop(), None
);
222 assert_eq
!(v
.iter().count(), 0);
224 assert_eq
!(v
.iter().count(), 1);
226 assert_eq
!(v
.iter().count(), 2);
230 assert_eq
!(v
.iter_mut().count(), 2);
232 assert_eq
!(v
.iter_mut().count(), 3);
234 assert_eq
!(v
.iter_mut().count(), 4);
236 for &mut () in &mut v {}
237 unsafe { v.set_len(0); }
238 assert_eq
!(v
.iter_mut().count(), 0);
242 fn test_partition() {
243 assert_eq
!(vec
![].into_iter().partition(|x
: &i32| *x
< 3), (vec
![], vec
![]));
244 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 4), (vec
![1, 2, 3], vec
![]));
245 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 2), (vec
![1], vec
![2, 3]));
246 assert_eq
!(vec
![1, 2, 3].into_iter().partition(|x
| *x
< 0), (vec
![], vec
![1, 2, 3]));
250 fn test_zip_unzip() {
251 let z1
= vec
![(1, 4), (2, 5), (3, 6)];
253 let (left
, right
): (Vec
<_
>, Vec
<_
>) = z1
.iter().cloned().unzip();
255 assert_eq
!((1, 4), (left
[0], right
[0]));
256 assert_eq
!((2, 5), (left
[1], right
[1]));
257 assert_eq
!((3, 6), (left
[2], right
[2]));
261 fn test_unsafe_ptrs() {
263 // Test on-stack copy-from-buf.
265 let ptr
= a
.as_ptr();
266 let b
= Vec
::from_raw_buf(ptr
, 3);
267 assert_eq
!(b
, [1, 2, 3]);
269 // Test on-heap copy-from-buf.
270 let c
= vec
![1, 2, 3, 4, 5];
271 let ptr
= c
.as_ptr();
272 let d
= Vec
::from_raw_buf(ptr
, 5);
273 assert_eq
!(d
, [1, 2, 3, 4, 5]);
278 fn test_vec_truncate_drop() {
279 static mut drops
: u32 = 0;
283 unsafe { drops += 1; }
287 let mut v
= vec
![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];
288 assert_eq
!(unsafe { drops }
, 0);
290 assert_eq
!(unsafe { drops }
, 2);
292 assert_eq
!(unsafe { drops }
, 5);
297 fn test_vec_truncate_fail() {
299 impl Drop
for BadElem
{
301 let BadElem(ref mut x
) = *self;
303 panic
!("BadElem panic: 0xbadbeef")
308 let mut v
= vec
![BadElem(1), BadElem(2), BadElem(0xbadbeef), BadElem(4)];
314 let vec
= vec
![1, 2, 3];
315 assert
!(vec
[1] == 2);
320 fn test_index_out_of_bounds() {
321 let vec
= vec
![1, 2, 3];
327 fn test_slice_out_of_bounds_1() {
328 let x
= vec
![1, 2, 3, 4, 5];
334 fn test_slice_out_of_bounds_2() {
335 let x
= vec
![1, 2, 3, 4, 5];
341 fn test_slice_out_of_bounds_3() {
342 let x
= vec
![1, 2, 3, 4, 5];
348 fn test_slice_out_of_bounds_4() {
349 let x
= vec
![1, 2, 3, 4, 5];
355 fn test_slice_out_of_bounds_5() {
356 let x
= vec
![1, 2, 3, 4, 5];
362 fn test_swap_remove_empty() {
363 let mut vec
= Vec
::<i32>::new();
368 fn test_move_iter_unwrap() {
369 let mut vec
= Vec
::with_capacity(7);
372 let ptr
= vec
.as_ptr();
373 vec
= vec
.into_iter().into_inner();
374 assert_eq
!(vec
.as_ptr(), ptr
);
375 assert_eq
!(vec
.capacity(), 7);
376 assert_eq
!(vec
.len(), 0);
381 fn test_map_in_place_incompatible_types_fail() {
382 let v
= vec
![0, 1, 2];
383 v
.map_in_place(|_
| ());
387 fn test_map_in_place() {
388 let v
= vec
![0, 1, 2];
389 assert_eq
!(v
.map_in_place(|i
: u32| i
as i32 - 1), [-1, 0, 1]);
393 fn test_map_in_place_zero_sized() {
394 let v
= vec
![(), ()];
395 #[derive(PartialEq, Debug)]
397 assert_eq
!(v
.map_in_place(|_
| ZeroSized
), [ZeroSized
, ZeroSized
]);
401 fn test_map_in_place_zero_drop_count() {
402 use std
::sync
::atomic
::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT}
;
404 #[derive(Clone, PartialEq, Debug)]
406 impl Drop
for Nothing { fn drop(&mut self) { }
}
408 #[derive(Clone, PartialEq, Debug)]
410 impl Drop
for ZeroSized
{
412 DROP_COUNTER
.fetch_add(1, Ordering
::Relaxed
);
415 const NUM_ELEMENTS
: usize = 2;
416 static DROP_COUNTER
: AtomicUsize
= ATOMIC_USIZE_INIT
;
418 let v
= repeat(Nothing
).take(NUM_ELEMENTS
).collect
::<Vec
<_
>>();
420 DROP_COUNTER
.store(0, Ordering
::Relaxed
);
422 let v
= v
.map_in_place(|_
| ZeroSized
);
423 assert_eq
!(DROP_COUNTER
.load(Ordering
::Relaxed
), 0);
425 assert_eq
!(DROP_COUNTER
.load(Ordering
::Relaxed
), NUM_ELEMENTS
);
429 fn test_move_items() {
430 let vec
= vec
![1, 2, 3];
431 let mut vec2
= vec
![];
435 assert_eq
!(vec2
, [1, 2, 3]);
439 fn test_move_items_reverse() {
440 let vec
= vec
![1, 2, 3];
441 let mut vec2
= vec
![];
442 for i
in vec
.into_iter().rev() {
445 assert_eq
!(vec2
, [3, 2, 1]);
449 fn test_move_items_zero_sized() {
450 let vec
= vec
![(), (), ()];
451 let mut vec2
= vec
![];
455 assert_eq
!(vec2
, [(), (), ()]);
459 fn test_drain_items() {
460 let mut vec
= vec
![1, 2, 3];
461 let mut vec2
= vec
![];
462 for i
in vec
.drain(..) {
466 assert_eq
!(vec2
, [ 1, 2, 3 ]);
470 fn test_drain_items_reverse() {
471 let mut vec
= vec
![1, 2, 3];
472 let mut vec2
= vec
![];
473 for i
in vec
.drain(..).rev() {
477 assert_eq
!(vec2
, [3, 2, 1]);
481 fn test_drain_items_zero_sized() {
482 let mut vec
= vec
![(), (), ()];
483 let mut vec2
= vec
![];
484 for i
in vec
.drain(..) {
488 assert_eq
!(vec2
, [(), (), ()]);
493 fn test_drain_out_of_bounds() {
494 let mut v
= vec
![1, 2, 3, 4, 5];
499 fn test_drain_range() {
500 let mut v
= vec
![1, 2, 3, 4, 5];
501 for _
in v
.drain(4..) {
503 assert_eq
!(v
, &[1, 2, 3, 4]);
505 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
506 for _
in v
.drain(1..4) {
508 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
510 let mut v
: Vec
<_
> = (1..6).map(|x
| x
.to_string()).collect();
511 for _
in v
.drain(1..4).rev() {
513 assert_eq
!(v
, &[1.to_string(), 5.to_string()]);
515 let mut v
: Vec
<_
> = vec
![(); 5];
516 for _
in v
.drain(1..4).rev() {
518 assert_eq
!(v
, &[(), ()]);
522 fn test_into_boxed_slice() {
523 let xs
= vec
![1, 2, 3];
524 let ys
= xs
.into_boxed_slice();
525 assert_eq
!(&*ys
, [1, 2, 3]);
530 let mut vec
= vec
![1, 2, 3];
531 let mut vec2
= vec
![4, 5, 6];
532 vec
.append(&mut vec2
);
533 assert_eq
!(vec
, [1, 2, 3, 4, 5, 6]);
534 assert_eq
!(vec2
, []);
538 fn test_split_off() {
539 let mut vec
= vec
![1, 2, 3, 4, 5, 6];
540 let vec2
= vec
.split_off(4);
541 assert_eq
!(vec
, [1, 2, 3, 4]);
542 assert_eq
!(vec2
, [5, 6]);
546 fn test_into_iter_count() {
547 assert_eq
!(vec
![1, 2, 3].into_iter().count(), 3);
551 fn bench_new(b
: &mut Bencher
) {
553 let v
: Vec
<u32> = Vec
::new();
554 assert_eq
!(v
.len(), 0);
555 assert_eq
!(v
.capacity(), 0);
559 fn do_bench_with_capacity(b
: &mut Bencher
, src_len
: usize) {
560 b
.bytes
= src_len
as u64;
563 let v
: Vec
<u32> = Vec
::with_capacity(src_len
);
564 assert_eq
!(v
.len(), 0);
565 assert_eq
!(v
.capacity(), src_len
);
570 fn bench_with_capacity_0000(b
: &mut Bencher
) {
571 do_bench_with_capacity(b
, 0)
575 fn bench_with_capacity_0010(b
: &mut Bencher
) {
576 do_bench_with_capacity(b
, 10)
580 fn bench_with_capacity_0100(b
: &mut Bencher
) {
581 do_bench_with_capacity(b
, 100)
585 fn bench_with_capacity_1000(b
: &mut Bencher
) {
586 do_bench_with_capacity(b
, 1000)
589 fn do_bench_from_fn(b
: &mut Bencher
, src_len
: usize) {
590 b
.bytes
= src_len
as u64;
593 let dst
= (0..src_len
).collect
::<Vec
<_
>>();
594 assert_eq
!(dst
.len(), src_len
);
595 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
600 fn bench_from_fn_0000(b
: &mut Bencher
) {
601 do_bench_from_fn(b
, 0)
605 fn bench_from_fn_0010(b
: &mut Bencher
) {
606 do_bench_from_fn(b
, 10)
610 fn bench_from_fn_0100(b
: &mut Bencher
) {
611 do_bench_from_fn(b
, 100)
615 fn bench_from_fn_1000(b
: &mut Bencher
) {
616 do_bench_from_fn(b
, 1000)
619 fn do_bench_from_elem(b
: &mut Bencher
, src_len
: usize) {
620 b
.bytes
= src_len
as u64;
623 let dst
: Vec
<usize> = repeat(5).take(src_len
).collect();
624 assert_eq
!(dst
.len(), src_len
);
625 assert
!(dst
.iter().all(|x
| *x
== 5));
630 fn bench_from_elem_0000(b
: &mut Bencher
) {
631 do_bench_from_elem(b
, 0)
635 fn bench_from_elem_0010(b
: &mut Bencher
) {
636 do_bench_from_elem(b
, 10)
640 fn bench_from_elem_0100(b
: &mut Bencher
) {
641 do_bench_from_elem(b
, 100)
645 fn bench_from_elem_1000(b
: &mut Bencher
) {
646 do_bench_from_elem(b
, 1000)
649 fn do_bench_from_slice(b
: &mut Bencher
, src_len
: usize) {
650 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
652 b
.bytes
= src_len
as u64;
655 let dst
= src
.clone()[..].to_vec();
656 assert_eq
!(dst
.len(), src_len
);
657 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
662 fn bench_from_slice_0000(b
: &mut Bencher
) {
663 do_bench_from_slice(b
, 0)
667 fn bench_from_slice_0010(b
: &mut Bencher
) {
668 do_bench_from_slice(b
, 10)
672 fn bench_from_slice_0100(b
: &mut Bencher
) {
673 do_bench_from_slice(b
, 100)
677 fn bench_from_slice_1000(b
: &mut Bencher
) {
678 do_bench_from_slice(b
, 1000)
681 fn do_bench_from_iter(b
: &mut Bencher
, src_len
: usize) {
682 let src
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
684 b
.bytes
= src_len
as u64;
687 let dst
: Vec
<_
> = FromIterator
::from_iter(src
.clone().into_iter());
688 assert_eq
!(dst
.len(), src_len
);
689 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
694 fn bench_from_iter_0000(b
: &mut Bencher
) {
695 do_bench_from_iter(b
, 0)
699 fn bench_from_iter_0010(b
: &mut Bencher
) {
700 do_bench_from_iter(b
, 10)
704 fn bench_from_iter_0100(b
: &mut Bencher
) {
705 do_bench_from_iter(b
, 100)
709 fn bench_from_iter_1000(b
: &mut Bencher
) {
710 do_bench_from_iter(b
, 1000)
713 fn do_bench_extend(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
714 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
715 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
717 b
.bytes
= src_len
as u64;
720 let mut dst
= dst
.clone();
721 dst
.extend(src
.clone().into_iter());
722 assert_eq
!(dst
.len(), dst_len
+ src_len
);
723 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
728 fn bench_extend_0000_0000(b
: &mut Bencher
) {
729 do_bench_extend(b
, 0, 0)
733 fn bench_extend_0000_0010(b
: &mut Bencher
) {
734 do_bench_extend(b
, 0, 10)
738 fn bench_extend_0000_0100(b
: &mut Bencher
) {
739 do_bench_extend(b
, 0, 100)
743 fn bench_extend_0000_1000(b
: &mut Bencher
) {
744 do_bench_extend(b
, 0, 1000)
748 fn bench_extend_0010_0010(b
: &mut Bencher
) {
749 do_bench_extend(b
, 10, 10)
753 fn bench_extend_0100_0100(b
: &mut Bencher
) {
754 do_bench_extend(b
, 100, 100)
758 fn bench_extend_1000_1000(b
: &mut Bencher
) {
759 do_bench_extend(b
, 1000, 1000)
762 fn do_bench_push_all(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
763 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
764 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
766 b
.bytes
= src_len
as u64;
769 let mut dst
= dst
.clone();
771 assert_eq
!(dst
.len(), dst_len
+ src_len
);
772 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
777 fn bench_push_all_0000_0000(b
: &mut Bencher
) {
778 do_bench_push_all(b
, 0, 0)
782 fn bench_push_all_0000_0010(b
: &mut Bencher
) {
783 do_bench_push_all(b
, 0, 10)
787 fn bench_push_all_0000_0100(b
: &mut Bencher
) {
788 do_bench_push_all(b
, 0, 100)
792 fn bench_push_all_0000_1000(b
: &mut Bencher
) {
793 do_bench_push_all(b
, 0, 1000)
797 fn bench_push_all_0010_0010(b
: &mut Bencher
) {
798 do_bench_push_all(b
, 10, 10)
802 fn bench_push_all_0100_0100(b
: &mut Bencher
) {
803 do_bench_push_all(b
, 100, 100)
807 fn bench_push_all_1000_1000(b
: &mut Bencher
) {
808 do_bench_push_all(b
, 1000, 1000)
811 fn do_bench_push_all_move(b
: &mut Bencher
, dst_len
: usize, src_len
: usize) {
812 let dst
: Vec
<_
> = FromIterator
::from_iter(0..dst_len
);
813 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
815 b
.bytes
= src_len
as u64;
818 let mut dst
= dst
.clone();
819 dst
.extend(src
.clone().into_iter());
820 assert_eq
!(dst
.len(), dst_len
+ src_len
);
821 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
826 fn bench_push_all_move_0000_0000(b
: &mut Bencher
) {
827 do_bench_push_all_move(b
, 0, 0)
831 fn bench_push_all_move_0000_0010(b
: &mut Bencher
) {
832 do_bench_push_all_move(b
, 0, 10)
836 fn bench_push_all_move_0000_0100(b
: &mut Bencher
) {
837 do_bench_push_all_move(b
, 0, 100)
841 fn bench_push_all_move_0000_1000(b
: &mut Bencher
) {
842 do_bench_push_all_move(b
, 0, 1000)
846 fn bench_push_all_move_0010_0010(b
: &mut Bencher
) {
847 do_bench_push_all_move(b
, 10, 10)
851 fn bench_push_all_move_0100_0100(b
: &mut Bencher
) {
852 do_bench_push_all_move(b
, 100, 100)
856 fn bench_push_all_move_1000_1000(b
: &mut Bencher
) {
857 do_bench_push_all_move(b
, 1000, 1000)
860 fn do_bench_clone(b
: &mut Bencher
, src_len
: usize) {
861 let src
: Vec
<usize> = FromIterator
::from_iter(0..src_len
);
863 b
.bytes
= src_len
as u64;
866 let dst
= src
.clone();
867 assert_eq
!(dst
.len(), src_len
);
868 assert
!(dst
.iter().enumerate().all(|(i
, x
)| i
== *x
));
873 fn bench_clone_0000(b
: &mut Bencher
) {
878 fn bench_clone_0010(b
: &mut Bencher
) {
879 do_bench_clone(b
, 10)
883 fn bench_clone_0100(b
: &mut Bencher
) {
884 do_bench_clone(b
, 100)
888 fn bench_clone_1000(b
: &mut Bencher
) {
889 do_bench_clone(b
, 1000)
892 fn do_bench_clone_from(b
: &mut Bencher
, times
: usize, dst_len
: usize, src_len
: usize) {
893 let dst
: Vec
<_
> = FromIterator
::from_iter(0..src_len
);
894 let src
: Vec
<_
> = FromIterator
::from_iter(dst_len
..dst_len
+ src_len
);
896 b
.bytes
= (times
* src_len
) as u64;
899 let mut dst
= dst
.clone();
902 dst
.clone_from(&src
);
904 assert_eq
!(dst
.len(), src_len
);
905 assert
!(dst
.iter().enumerate().all(|(i
, x
)| dst_len
+ i
== *x
));
911 fn bench_clone_from_01_0000_0000(b
: &mut Bencher
) {
912 do_bench_clone_from(b
, 1, 0, 0)
916 fn bench_clone_from_01_0000_0010(b
: &mut Bencher
) {
917 do_bench_clone_from(b
, 1, 0, 10)
921 fn bench_clone_from_01_0000_0100(b
: &mut Bencher
) {
922 do_bench_clone_from(b
, 1, 0, 100)
926 fn bench_clone_from_01_0000_1000(b
: &mut Bencher
) {
927 do_bench_clone_from(b
, 1, 0, 1000)
931 fn bench_clone_from_01_0010_0010(b
: &mut Bencher
) {
932 do_bench_clone_from(b
, 1, 10, 10)
936 fn bench_clone_from_01_0100_0100(b
: &mut Bencher
) {
937 do_bench_clone_from(b
, 1, 100, 100)
941 fn bench_clone_from_01_1000_1000(b
: &mut Bencher
) {
942 do_bench_clone_from(b
, 1, 1000, 1000)
946 fn bench_clone_from_01_0010_0100(b
: &mut Bencher
) {
947 do_bench_clone_from(b
, 1, 10, 100)
951 fn bench_clone_from_01_0100_1000(b
: &mut Bencher
) {
952 do_bench_clone_from(b
, 1, 100, 1000)
956 fn bench_clone_from_01_0010_0000(b
: &mut Bencher
) {
957 do_bench_clone_from(b
, 1, 10, 0)
961 fn bench_clone_from_01_0100_0010(b
: &mut Bencher
) {
962 do_bench_clone_from(b
, 1, 100, 10)
966 fn bench_clone_from_01_1000_0100(b
: &mut Bencher
) {
967 do_bench_clone_from(b
, 1, 1000, 100)
971 fn bench_clone_from_10_0000_0000(b
: &mut Bencher
) {
972 do_bench_clone_from(b
, 10, 0, 0)
976 fn bench_clone_from_10_0000_0010(b
: &mut Bencher
) {
977 do_bench_clone_from(b
, 10, 0, 10)
981 fn bench_clone_from_10_0000_0100(b
: &mut Bencher
) {
982 do_bench_clone_from(b
, 10, 0, 100)
986 fn bench_clone_from_10_0000_1000(b
: &mut Bencher
) {
987 do_bench_clone_from(b
, 10, 0, 1000)
991 fn bench_clone_from_10_0010_0010(b
: &mut Bencher
) {
992 do_bench_clone_from(b
, 10, 10, 10)
996 fn bench_clone_from_10_0100_0100(b
: &mut Bencher
) {
997 do_bench_clone_from(b
, 10, 100, 100)
1001 fn bench_clone_from_10_1000_1000(b
: &mut Bencher
) {
1002 do_bench_clone_from(b
, 10, 1000, 1000)
1006 fn bench_clone_from_10_0010_0100(b
: &mut Bencher
) {
1007 do_bench_clone_from(b
, 10, 10, 100)
1011 fn bench_clone_from_10_0100_1000(b
: &mut Bencher
) {
1012 do_bench_clone_from(b
, 10, 100, 1000)
1016 fn bench_clone_from_10_0010_0000(b
: &mut Bencher
) {
1017 do_bench_clone_from(b
, 10, 10, 0)
1021 fn bench_clone_from_10_0100_0010(b
: &mut Bencher
) {
1022 do_bench_clone_from(b
, 10, 100, 10)
1026 fn bench_clone_from_10_1000_0100(b
: &mut Bencher
) {
1027 do_bench_clone_from(b
, 10, 1000, 100)