@@ -3505,3 +3505,85 @@ pub fn extend_for_unit() {
3505
3505
}
3506
3506
assert_eq ! ( x, 5 ) ;
3507
3507
}
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