@@ -12,6 +12,8 @@ class IteratorDecoratorTest {
12
12
Assert .assertEquals(Seq ('a' , ',' , 'b' , ',' , 'c' ), Iterator ('a' , 'b' , 'c' ).intersperse(',' ).toSeq)
13
13
Assert .assertEquals(Seq ('a' ), Iterator ('a' ).intersperse(',' ).toSeq)
14
14
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)
15
17
}
16
18
17
19
@ Test
@@ -21,6 +23,8 @@ class IteratorDecoratorTest {
21
23
Iterator ('a' , 'b' , 'c' ).intersperse('[' , ',' , ']' ).toSeq)
22
24
Assert .assertEquals(Seq ('[' , 'a' , ']' ), Iterator ('a' ).intersperse('[' , ',' , ']' ).toSeq)
23
25
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)
24
28
}
25
29
26
30
@ Test
@@ -30,6 +34,9 @@ class IteratorDecoratorTest {
30
34
Assert .assertEquals(6 , Iterator (1 , 2 , 3 ).foldSomeLeft(0 )(sumOp))
31
35
Assert .assertEquals(6 , Iterator (1 , 2 , 3 , 4 , 5 ).foldSomeLeft(0 )(sumOp))
32
36
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))
33
40
}
34
41
35
42
@ Test
@@ -43,6 +50,8 @@ class IteratorDecoratorTest {
43
50
Assert .assertEquals(9 , Iterator (4 , 5 ).lazyFoldLeft(0 )(sumOp))
44
51
Assert .assertEquals(9 , Iterator (4 , 5 , 1 ).lazyFoldLeft(0 )(sumOp))
45
52
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))
46
55
}
47
56
48
57
@ Test
@@ -54,6 +63,8 @@ class IteratorDecoratorTest {
54
63
Assert .assertEquals(9 , Iterator (4 , 5 ).lazyFoldLeft(0 )(delayedSumOp))
55
64
Assert .assertEquals(5 , Iterator (4 , 5 , 1 ).lazyFoldLeft(0 )(delayedSumOp))
56
65
Assert .assertEquals(5 , Iterator (6 , 1 ).lazyFoldLeft(0 )(delayedSumOp))
66
+ // Works with infinite iterators:
67
+ Assert .assertEquals(5 , Iterator .continually(1 ).lazyFoldLeft(0 )(delayedSumOp))
57
68
58
69
// `alwaysGrowingSumOp` returns a new value every time, causing no stop in the iteration.
59
70
def alwaysGrowingSumOp (acc : Int , e : => Int ): Int = if (acc >= 5 ) acc + 1 else acc + e
@@ -117,4 +128,12 @@ class IteratorDecoratorTest {
117
128
Iterator ((1 ,1 ), (1 ,2 ), (2 ,3 ), (1 ,4 )).splitBy(_._1).toSeq
118
129
)
119
130
}
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
+ }
120
139
}
0 commit comments