@@ -33,32 +33,43 @@ fn test_specializations<IterItem, Iter>(
33
33
IterItem : Eq + Debug + Clone ,
34
34
Iter : Iterator < Item = IterItem > + Clone ,
35
35
{
36
- let size = it. clone ( ) . count ( ) ;
37
36
check_specialized ( it, |i| i. count ( ) ) ;
38
37
check_specialized ( it, |i| i. last ( ) ) ;
38
+ check_specialized ( it, |i| i. collect :: < Vec < _ > > ( ) ) ;
39
+ check_specialized ( it, |i| {
40
+ let mut parameters_from_fold = vec ! [ ] ;
41
+ let fold_result = i. fold ( vec ! [ ] , |mut acc, v : IterItem | {
42
+ parameters_from_fold. push ( ( acc. clone ( ) , v. clone ( ) ) ) ;
43
+ acc. push ( v) ;
44
+ acc
45
+ } ) ;
46
+ ( parameters_from_fold, fold_result)
47
+ } ) ;
48
+ check_specialized ( it, |mut i| {
49
+ let mut parameters_from_all = vec ! [ ] ;
50
+ let first = i. next ( ) ;
51
+ let all_result = i. all ( |x| {
52
+ parameters_from_all. push ( x. clone ( ) ) ;
53
+ Some ( x) ==first
54
+ } ) ;
55
+ ( parameters_from_all, all_result)
56
+ } ) ;
57
+ let size = it. clone ( ) . count ( ) ;
39
58
for n in 0 ..size + 2 {
40
59
check_specialized ( it, |mut i| i. nth ( n) ) ;
41
60
}
61
+ // size_hint is a bit harder to check
42
62
let mut it_sh = it. clone ( ) ;
43
63
for n in 0 ..size + 2 {
44
64
let len = it_sh. clone ( ) . count ( ) ;
45
65
let ( min, max) = it_sh. size_hint ( ) ;
46
- assert_eq ! ( ( size - n. min( size) ) , len) ;
66
+ assert_eq ! ( size - n. min( size) , len) ;
47
67
assert ! ( min <= len) ;
48
68
if let Some ( max) = max {
49
69
assert ! ( len <= max) ;
50
70
}
51
71
it_sh. next ( ) ;
52
72
}
53
- check_specialized ( it, |i| {
54
- let mut parameters_from_fold = vec ! [ ] ;
55
- let fold_result = i. fold ( vec ! [ ] , |mut acc, v : IterItem | {
56
- parameters_from_fold. push ( ( acc. clone ( ) , v. clone ( ) ) ) ;
57
- acc. push ( v) ;
58
- acc
59
- } ) ;
60
- ( parameters_from_fold, fold_result)
61
- } ) ;
62
73
}
63
74
64
75
fn put_back_test ( test_vec : Vec < i32 > ) {
0 commit comments