@@ -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