@@ -13,10 +13,6 @@ import kotlin.test.*
13
13
*/
14
14
class ZipTest : TestBase () {
15
15
16
- internal fun <T1 , T2 , R > Flow<T1>.zip (flow2 : Flow <T2 >, transform : suspend (T1 , T2 ) -> R ): Flow <R > {
17
- return zipImpl(this , flow2, transform)
18
- }
19
-
20
16
@Test
21
17
fun testZip () = runTest {
22
18
val f1 = flowOf(" a" , " b" , " c" )
@@ -28,7 +24,7 @@ class ZipTest : TestBase() {
28
24
fun testUnevenZip () = runTest {
29
25
val f1 = flowOf(" a" , " b" , " c" , " d" , " e" )
30
26
val f2 = flowOf(1 , 2 , 3 )
31
- assertEquals(listOf (" a1" , " b2" , " c3" ), f1.zip(f2, { i, j -> i + j }) .toList())
27
+ assertEquals(listOf (" a1" , " b2" , " c3" ), f1.zip(f2) { i, j -> i + j }.toList())
32
28
assertEquals(listOf (" a1" , " b2" , " c3" ), f2.zip(f1) { i, j -> j + i }.toList())
33
29
}
34
30
@@ -83,6 +79,24 @@ class ZipTest : TestBase() {
83
79
finish(1 )
84
80
}
85
81
82
+ @Test
83
+ fun testCancelWhenFlowIsDone2 () = runTest {
84
+ val f1 = flow<String > {
85
+ emit(" 1" )
86
+ emit(" 2" )
87
+ try {
88
+ emit(" 3" )
89
+ expectUnreached()
90
+ } finally {
91
+ expect(1 )
92
+ }
93
+ }
94
+
95
+ val f2 = flowOf(" a" , " b" )
96
+ assertEquals(listOf (" 1a" , " 2b" ), f1.zip(f2) { s1, s2 -> s1 + s2 }.toList())
97
+ finish(2 )
98
+ }
99
+
86
100
@Test
87
101
fun testCancelWhenFlowIsDoneReversed () = runTest {
88
102
val f1 = flow<String > {
@@ -93,7 +107,7 @@ class ZipTest : TestBase() {
93
107
}
94
108
}
95
109
96
- val f2 = flow<String > {
110
+ val f2 = flow<String > {
97
111
emit(" a" )
98
112
emit(" b" )
99
113
yield ()
@@ -135,19 +149,19 @@ class ZipTest : TestBase() {
135
149
finish(6 )
136
150
}
137
151
138
- // @Test
152
+ @Test
139
153
fun testErrorInDownstreamCancelsUpstream () = runTest {
140
154
val f1 = flow {
141
155
emit(" a" )
142
156
hang {
143
- expect(2 )
157
+ expect(3 )
144
158
}
145
159
}.flowOn(NamedDispatchers (" first" ))
146
160
147
161
val f2 = flow {
148
162
emit(1 )
149
163
hang {
150
- expect(3 )
164
+ expect(2 )
151
165
}
152
166
}.flowOn(NamedDispatchers (" second" ))
153
167
@@ -227,31 +241,18 @@ class ZipTest : TestBase() {
227
241
finish(6 )
228
242
}
229
243
230
- private fun numbers (limit : Long = Long .MAX_VALUE ) = flow {
231
- for (i in 2L .. limit) emit(i)
232
- }
233
-
234
244
@Test
235
- fun zip () = runTest {
236
- val numbers = numbers(1000 )
237
- val first = numbers
238
- .filter { it % 2L != 0L }
239
- .map { it * it }
240
- val second = numbers
241
- .filter { it % 2L == 0L }
242
- .map { it * it }
243
- first.zip(second) { v1, v2 -> v1 + v2 }.filter { it % 3 == 0L }.count()
244
- }
245
+ fun testCancellationOfCollector () = runTest {
246
+ val f1 = flow {
247
+ emit(" 1" )
248
+ awaitCancellation()
249
+ }
245
250
246
- @Test
247
- fun zip2 () = runTest {
248
- val numbers = numbers(10000 )
249
- val first = numbers
250
- .filter { it % 2L != 0L }
251
- .map { it * it }
252
- val second = numbers
253
- .filter { it % 2L == 0L }
254
- .map { it * it }
255
- first.zip(second) { v1, v2 -> v1 + v2 }.filter { it % 3 == 0L }.count()
251
+ val f2 = flow {
252
+ emit(" 2" )
253
+ yield ()
254
+ }
255
+
256
+ f1.zip(f2) { a, b -> a + b }.collect { }
256
257
}
257
258
}
0 commit comments