@@ -98,3 +98,50 @@ quickcheck! {
9898 test_specializations( & v. into_iter( ) . map_ok( |u| u. checked_add( 1 ) ) ) ;
9999 }
100100}
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