aboutsummaryrefslogtreecommitdiffstats
path: root/reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt')
-rw-r--r--reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt36
1 files changed, 36 insertions, 0 deletions
diff --git a/reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt b/reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt
new file mode 100644
index 00000000..b16310d0
--- /dev/null
+++ b/reactive/kotlinx-coroutines-reactive/test/PublisherCompletionStressTest.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.coroutines.reactive
+
+import kotlinx.coroutines.*
+import org.junit.*
+import java.util.*
+import kotlin.coroutines.*
+
+class PublisherCompletionStressTest : TestBase() {
+ private val N_REPEATS = 10_000 * stressTestMultiplier
+
+ private fun CoroutineScope.range(context: CoroutineContext, start: Int, count: Int) = publish(context) {
+ for (x in start until start + count) send(x)
+ }
+
+ @Test
+ fun testCompletion() {
+ val rnd = Random()
+ repeat(N_REPEATS) {
+ val count = rnd.nextInt(5)
+ runBlocking {
+ withTimeout(5000) {
+ var received = 0
+ range(Dispatchers.Default, 1, count).collect { x ->
+ received++
+ if (x != received) error("$x != $received")
+ }
+ if (received != count) error("$received != $count")
+ }
+ }
+ }
+ }
+} \ No newline at end of file