Skip to content

Commit 165fbaf

Browse files
committed
Fix numerical overflow in FlatMapStressTest.kt
1 parent e1ac2e5 commit 165fbaf

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

kotlinx-coroutines-core/common/test/TestBase.common.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public suspend inline fun <reified T : Throwable> assertFailsWith(flow: Flow<*>)
6161
}
6262

6363
public suspend fun Flow<Int>.sum() = fold(0) { acc, value -> acc + value }
64+
public suspend fun Flow<Long>.longSum() = fold(0L) { acc, value -> acc + value }
6465

6566
public class TestException(message: String? = null) : Throwable(message), NonRecoverableThrowable
6667
public class TestException1(message: String? = null) : Throwable(message), NonRecoverableThrowable

kotlinx-coroutines-core/jvm/test/flow/FlatMapStressTest.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import kotlin.test.*
1414
class FlatMapStressTest : TestBase() {
1515

1616
private val iterations = 2000 * stressTestMultiplier
17-
private val expectedSum = iterations * (iterations + 1) / 2
17+
private val expectedSum = iterations.toLong() * (iterations + 1) / 2
1818

1919
@Test
2020
fun testConcurrencyLevel() = runTest {
@@ -35,7 +35,7 @@ class FlatMapStressTest : TestBase() {
3535
val bufferSize = 5
3636
withContext(Dispatchers.Default) {
3737
val inFlightElements = AtomicLong(0L)
38-
var result = 0
38+
var result = 0L
3939
(1..iterations step 4).asFlow().flatMapMerge(bufferSize = bufferSize) { value ->
4040
unsafeFlow {
4141
repeat(4) {
@@ -59,11 +59,11 @@ class FlatMapStressTest : TestBase() {
5959
@Test
6060
fun testDelivery() = runTest {
6161
withContext(Dispatchers.Default) {
62-
val result = (1..iterations step 4).asFlow().flatMapMerge { value ->
62+
val result = (1L..iterations step 4).asFlow().flatMapMerge { value ->
6363
unsafeFlow {
6464
repeat(4) { emit(value + it) }
6565
}
66-
}.sum()
66+
}.longSum()
6767
assertEquals(expectedSum, result)
6868
}
6969
}
@@ -72,12 +72,12 @@ class FlatMapStressTest : TestBase() {
7272
fun testIndependentShortBursts() = runTest {
7373
withContext(Dispatchers.Default) {
7474
repeat(iterations) {
75-
val result = (1..4).asFlow().flatMapMerge { value ->
75+
val result = (1L..4L).asFlow().flatMapMerge { value ->
7676
unsafeFlow {
7777
emit(value)
7878
emit(value)
7979
}
80-
}.sum()
80+
}.longSum()
8181
assertEquals(20, result)
8282
}
8383
}
@@ -86,14 +86,14 @@ class FlatMapStressTest : TestBase() {
8686
private suspend fun testConcurrencyLevel(maxConcurrency: Int) {
8787
assumeTrue(maxConcurrency <= CORE_POOL_SIZE)
8888
val concurrency = AtomicLong()
89-
val result = (1..iterations).asFlow().flatMapMerge(concurrency = maxConcurrency) { value ->
89+
val result = (1L..iterations).asFlow().flatMapMerge(concurrency = maxConcurrency) { value ->
9090
unsafeFlow {
9191
val current = concurrency.incrementAndGet()
9292
assertTrue(current in 1..maxConcurrency)
9393
emit(value)
9494
concurrency.decrementAndGet()
9595
}
96-
}.sum()
96+
}.longSum()
9797

9898
assertEquals(0, concurrency.get())
9999
assertEquals(expectedSum, result)

0 commit comments

Comments
 (0)