@@ -12,6 +12,8 @@ class IteratorDecoratorTest {
1212 Assert .assertEquals(Seq ('a' , ',' , 'b' , ',' , 'c' ), Iterator ('a' , 'b' , 'c' ).intersperse(',' ).toSeq)
1313 Assert .assertEquals(Seq ('a' ), Iterator ('a' ).intersperse(',' ).toSeq)
1414 Assert .assertEquals(Seq .empty, Iterator ().intersperse(',' ).toSeq)
15+ // Works with infinite iterators:
16+ Assert .assertEquals(Seq (1 , 0 , 2 , 0 , 3 ), Iterator .from(1 ).intersperse(0 ).take(5 ).toSeq)
1517 }
1618
1719 @ Test
@@ -21,6 +23,8 @@ class IteratorDecoratorTest {
2123 Iterator ('a' , 'b' , 'c' ).intersperse('[' , ',' , ']' ).toSeq)
2224 Assert .assertEquals(Seq ('[' , 'a' , ']' ), Iterator ('a' ).intersperse('[' , ',' , ']' ).toSeq)
2325 Assert .assertEquals(Seq ('[' , ']' ), Iterator ().intersperse('[' , ',' , ']' ).toSeq)
26+ // Works with infinite iterators:
27+ Assert .assertEquals(Seq (- 1 , 1 , 0 , 2 , 0 , 3 ), Iterator .from(1 ).intersperse(- 1 , 0 , 99 ).take(6 ).toSeq)
2428 }
2529
2630 @ Test
@@ -30,6 +34,9 @@ class IteratorDecoratorTest {
3034 Assert .assertEquals(6 , Iterator (1 , 2 , 3 ).foldSomeLeft(0 )(sumOp))
3135 Assert .assertEquals(6 , Iterator (1 , 2 , 3 , 4 , 5 ).foldSomeLeft(0 )(sumOp))
3236 Assert .assertEquals(0 , Iterator (4 , 5 ).foldSomeLeft(0 )(sumOp))
37+ // Works with infinite iterators:
38+ def sumMax4 (acc : Int , e : Int ): Option [Int ] = if (acc == 4 ) None else Some (acc + e)
39+ Assert .assertEquals(4 , Iterator .continually(1 ).foldSomeLeft(0 )(sumMax4))
3340 }
3441
3542 @ Test
@@ -43,6 +50,8 @@ class IteratorDecoratorTest {
4350 Assert .assertEquals(9 , Iterator (4 , 5 ).lazyFoldLeft(0 )(sumOp))
4451 Assert .assertEquals(9 , Iterator (4 , 5 , 1 ).lazyFoldLeft(0 )(sumOp))
4552 Assert .assertEquals(10 , Iterator (10 , 20 , 30 ).lazyFoldLeft(0 )(sumOp))
53+ // Works with infinite iterators:
54+ Assert .assertEquals(5 , Iterator .continually(1 ).lazyFoldLeft(0 )(sumOp))
4655 }
4756
4857 @ Test
@@ -54,6 +63,8 @@ class IteratorDecoratorTest {
5463 Assert .assertEquals(9 , Iterator (4 , 5 ).lazyFoldLeft(0 )(delayedSumOp))
5564 Assert .assertEquals(5 , Iterator (4 , 5 , 1 ).lazyFoldLeft(0 )(delayedSumOp))
5665 Assert .assertEquals(5 , Iterator (6 , 1 ).lazyFoldLeft(0 )(delayedSumOp))
66+ // Works with infinite iterators:
67+ Assert .assertEquals(5 , Iterator .continually(1 ).lazyFoldLeft(0 )(delayedSumOp))
5768
5869 // `alwaysGrowingSumOp` returns a new value every time, causing no stop in the iteration.
5970 def alwaysGrowingSumOp (acc : Int , e : => Int ): Int = if (acc >= 5 ) acc + 1 else acc + e
@@ -117,4 +128,12 @@ class IteratorDecoratorTest {
117128 Iterator ((1 ,1 ), (1 ,2 ), (2 ,3 ), (1 ,4 )).splitBy(_._1).toSeq
118129 )
119130 }
131+
132+ @ Test
133+ def splitByShouldSplitInfiniteIterators (): Unit = {
134+ Assert .assertEquals(
135+ Seq (Seq (0 , 0 , 0 ), Seq (1 , 1 , 1 ), Seq (2 , 2 , 2 )),
136+ Iterator .from(0 ).map(_ / 3 ).splitBy(identity).take(3 ).toSeq
137+ )
138+ }
120139}
0 commit comments