@@ -998,6 +998,45 @@ quickcheck! {
998998 }
999999}
10001000
1001+ quickcheck ! {
1002+ fn pad_using_next_next_back( v: Vec <i8 >) -> ( ) {
1003+ let only_oks = v. into_iter( ) . map( Ok ) . collect:: <Vec <_>>( ) ;
1004+ for elements_required in 0 ..128 {
1005+ let mut oks_then_errs_vector = only_oks. clone( ) ;
1006+ while oks_then_errs_vector. len( ) < elements_required {
1007+ oks_then_errs_vector. push( Err ( oks_then_errs_vector. len( ) ) ) ;
1008+ }
1009+ let oks_then_errs_pad_using = only_oks. iter( ) . copied( ) . pad_using( elements_required, Err ) ;
1010+ assert_eq!(
1011+ oks_then_errs_pad_using. clone( ) . collect:: <Vec <_>>( ) ,
1012+ oks_then_errs_vector
1013+ ) ;
1014+ // Check next, next_back (https://github.com/rust-itertools/itertools/issues/1065)
1015+ let mut iter_check = oks_then_errs_vector. into_iter( ) ;
1016+ let mut iter_real = oks_then_errs_pad_using;
1017+ let mut rng = rand:: thread_rng( ) ;
1018+ loop {
1019+ let next_or_next_back = if rng. gen_bool( 0.5 ) {
1020+ let element_next_check = iter_check. next( ) ;
1021+ let element_next_real = iter_real. next( ) ;
1022+ assert_eq!( element_next_check, element_next_real) ;
1023+ element_next_real
1024+ } else {
1025+ let element_next_back_check = iter_check. next_back( ) ;
1026+ let element_next_back_real = iter_real. next_back( ) ;
1027+ assert_eq!( element_next_back_check, element_next_back_real) ;
1028+ element_next_back_real
1029+ } ;
1030+ if next_or_next_back. is_none( ) {
1031+ assert!( iter_real. next( ) . is_none( ) ) ;
1032+ assert!( iter_real. next_back( ) . is_none( ) ) ;
1033+ break ;
1034+ }
1035+ }
1036+ }
1037+ }
1038+ }
1039+
10011040quickcheck ! {
10021041 fn size_powerset( it: Iter <u8 , Exact >) -> bool {
10031042 // Powerset cardinality gets large very quickly, limit input to keep test fast.
0 commit comments