@@ -3505,3 +3505,85 @@ pub fn extend_for_unit() {
35053505 }
35063506 assert_eq ! ( x, 5 ) ;
35073507}
3508+
3509+ #[ test]
3510+ fn test_intersperse ( ) {
3511+ let xs = [ "a" , "" , "b" , "c" ] ;
3512+ let v: Vec < & str > = xs. iter ( ) . map ( |x| x. clone ( ) ) . intersperse ( ", " ) . collect ( ) ;
3513+ let text: String = v. concat ( ) ;
3514+ assert_eq ! ( text, "a, , b, c" . to_string( ) ) ;
3515+
3516+ let ys = [ 0 , 1 , 2 , 3 ] ;
3517+ let mut it = ys[ ..0 ] . iter ( ) . map ( |x| * x) . intersperse ( 1 ) ;
3518+ assert ! ( it. next( ) == None ) ;
3519+ }
3520+
3521+ #[ test]
3522+ fn test_intersperse_size_hint ( ) {
3523+ let xs = [ "a" , "" , "b" , "c" ] ;
3524+ let mut iter = xs. iter ( ) . map ( |x| x. clone ( ) ) . intersperse ( ", " ) ;
3525+ assert_eq ! ( iter. size_hint( ) , ( 7 , Some ( 7 ) ) ) ;
3526+
3527+ assert_eq ! ( iter. next( ) , Some ( "a" ) ) ;
3528+ assert_eq ! ( iter. size_hint( ) , ( 6 , Some ( 6 ) ) ) ;
3529+ assert_eq ! ( iter. next( ) , Some ( ", " ) ) ;
3530+ assert_eq ! ( iter. size_hint( ) , ( 5 , Some ( 5 ) ) ) ;
3531+
3532+ assert_eq ! ( [ ] . iter( ) . intersperse( & ( ) ) . size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
3533+ }
3534+
3535+ #[ test]
3536+ fn test_fold_specialization_intersperse ( ) {
3537+ let mut iter = ( 1 ..2 ) . intersperse ( 0 ) ;
3538+ iter. clone ( ) . for_each ( |x| assert_eq ! ( Some ( x) , iter. next( ) ) ) ;
3539+
3540+ let mut iter = ( 1 ..3 ) . intersperse ( 0 ) ;
3541+ iter. clone ( ) . for_each ( |x| assert_eq ! ( Some ( x) , iter. next( ) ) ) ;
3542+
3543+ let mut iter = ( 1 ..4 ) . intersperse ( 0 ) ;
3544+ iter. clone ( ) . for_each ( |x| assert_eq ! ( Some ( x) , iter. next( ) ) ) ;
3545+ }
3546+
3547+ #[ test]
3548+ fn test_try_fold_specialization_intersperse_ok ( ) {
3549+ let mut iter = ( 1 ..2 ) . intersperse ( 0 ) ;
3550+ iter. clone ( ) . try_for_each ( |x| {
3551+ assert_eq ! ( Some ( x) , iter. next( ) ) ;
3552+ Some ( ( ) )
3553+ } ) ;
3554+
3555+ let mut iter = ( 1 ..3 ) . intersperse ( 0 ) ;
3556+ iter. clone ( ) . try_for_each ( |x| {
3557+ assert_eq ! ( Some ( x) , iter. next( ) ) ;
3558+ Some ( ( ) )
3559+ } ) ;
3560+
3561+ let mut iter = ( 1 ..4 ) . intersperse ( 0 ) ;
3562+ iter. clone ( ) . try_for_each ( |x| {
3563+ assert_eq ! ( Some ( x) , iter. next( ) ) ;
3564+ Some ( ( ) )
3565+ } ) ;
3566+ }
3567+
3568+ #[ test]
3569+ fn test_try_fold_specialization_intersperse_err ( ) {
3570+ let orig_iter = [ "a" , "b" ] . iter ( ) . copied ( ) . intersperse ( "-" ) ;
3571+
3572+ // Abort after the first item.
3573+ let mut iter = orig_iter. clone ( ) ;
3574+ iter. try_for_each ( |_| None :: < ( ) > ) ;
3575+ assert_eq ! ( iter. next( ) , Some ( "-" ) ) ;
3576+ assert_eq ! ( iter. next( ) , Some ( "b" ) ) ;
3577+ assert_eq ! ( iter. next( ) , None ) ;
3578+
3579+ // Abort after the second item.
3580+ let mut iter = orig_iter. clone ( ) ;
3581+ iter. try_for_each ( |item| if item == "-" { None } else { Some ( ( ) ) } ) ;
3582+ assert_eq ! ( iter. next( ) , Some ( "b" ) ) ;
3583+ assert_eq ! ( iter. next( ) , None ) ;
3584+
3585+ // Abort after the third item.
3586+ let mut iter = orig_iter. clone ( ) ;
3587+ iter. try_for_each ( |item| if item == "b" { None } else { Some ( ( ) ) } ) ;
3588+ assert_eq ! ( iter. next( ) , None ) ;
3589+ }
0 commit comments