@@ -98,3 +98,50 @@ quickcheck! {
98
98
test_specializations( & v. into_iter( ) . map_ok( |u| u. checked_add( 1 ) ) ) ;
99
99
}
100
100
}
101
+
102
+ quickcheck ! {
103
+ fn process_results( v: Vec <Result <u8 , u8 >>) -> ( ) {
104
+ helper( v. iter( ) . copied( ) ) ;
105
+ helper( v. iter( ) . copied( ) . filter( Result :: is_ok) ) ;
106
+
107
+ fn helper( it: impl Iterator <Item = Result <u8 , u8 >> + Clone ) {
108
+ macro_rules! check_results_specialized {
109
+ ( $src: expr, |$it: pat| $closure: expr) => {
110
+ assert_eq!(
111
+ itertools:: process_results( $src. clone( ) , |$it| $closure) ,
112
+ itertools:: process_results( $src. clone( ) , |i| {
113
+ let $it = Unspecialized ( i) ;
114
+ $closure
115
+ } ) ,
116
+ )
117
+ }
118
+ }
119
+
120
+ check_results_specialized!( it, |i| i. count( ) ) ;
121
+ check_results_specialized!( it, |i| i. last( ) ) ;
122
+ check_results_specialized!( it, |i| i. collect:: <Vec <_>>( ) ) ;
123
+ check_results_specialized!( it, |i| {
124
+ let mut parameters_from_fold = vec![ ] ;
125
+ let fold_result = i. fold( vec![ ] , |mut acc, v| {
126
+ parameters_from_fold. push( ( acc. clone( ) , v. clone( ) ) ) ;
127
+ acc. push( v) ;
128
+ acc
129
+ } ) ;
130
+ ( parameters_from_fold, fold_result)
131
+ } ) ;
132
+ check_results_specialized!( it, |mut i| {
133
+ let mut parameters_from_all = vec![ ] ;
134
+ let first = i. next( ) ;
135
+ let all_result = i. all( |x| {
136
+ parameters_from_all. push( x. clone( ) ) ;
137
+ Some ( x) ==first
138
+ } ) ;
139
+ ( parameters_from_all, all_result)
140
+ } ) ;
141
+ let size = it. clone( ) . count( ) ;
142
+ for n in 0 ..size + 2 {
143
+ check_results_specialized!( it, |mut i| i. nth( n) ) ;
144
+ }
145
+ }
146
+ }
147
+ }
0 commit comments