blob: b02fbe6bb59ec68391370032de6bf4ce04bbfb2e [file] [log] [blame]
/*
* Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.coroutines.experimental.internal
import kotlinx.coroutines.experimental.*
import kotlin.test.*
class LockFreeMPSCQueueTest : TestBase() {
@Test
fun testBasic() {
val q = LockFreeMPSCQueue<Int>()
assertTrue(q.isEmpty)
assertTrue(q.addLast(1))
assertFalse(q.isEmpty)
assertTrue(q.addLast(2))
assertFalse(q.isEmpty)
assertTrue(q.addLast(3))
assertFalse(q.isEmpty)
assertEquals(1, q.removeFirstOrNull())
assertFalse(q.isEmpty)
assertEquals(2, q.removeFirstOrNull())
assertFalse(q.isEmpty)
assertTrue(q.addLast(4))
q.close()
assertFalse(q.isEmpty)
assertFalse(q.addLast(5))
assertFalse(q.isEmpty)
assertEquals(3, q.removeFirstOrNull())
assertFalse(q.isEmpty)
assertEquals(4, q.removeFirstOrNull())
assertTrue(q.isEmpty)
}
@Test
fun testCopyGrow() {
val n = 1000 * stressTestMultiplier
val q = LockFreeMPSCQueue<Int>()
assertTrue(q.isEmpty)
repeat(n) { i ->
assertTrue(q.addLast(i))
assertFalse(q.isEmpty)
}
repeat(n) { i ->
assertEquals(i, q.removeFirstOrNull())
}
assertTrue(q.isEmpty)
}
}