[K/N] Migrate runtime/atomics tests to new testing infra ^KT-61259
This commit is contained in:
committed by
Space Team
parent
ba374bb45c
commit
2f22b0a6b0
@@ -0,0 +1,217 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package test.concurrent
|
||||
|
||||
import kotlin.concurrent.*
|
||||
import kotlin.native.internal.NativePtr
|
||||
import kotlin.test.*
|
||||
|
||||
data class Data(val value: Int)
|
||||
|
||||
class AtomicIntTest {
|
||||
@Test fun ctor() {
|
||||
val x = AtomicInt(0)
|
||||
assertEquals(x.value, 0)
|
||||
}
|
||||
|
||||
@Test fun setter() {
|
||||
val x = AtomicInt(0)
|
||||
x.value = 1
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun addAndGet() {
|
||||
val x = AtomicInt(1)
|
||||
val result = x.addAndGet(2)
|
||||
assertEquals(result, 1 + 2)
|
||||
assertEquals(x.value, result)
|
||||
}
|
||||
|
||||
@Test fun compareAndExchange() {
|
||||
val x = AtomicInt(0)
|
||||
val successValue = x.compareAndExchange(0, 1)
|
||||
assertEquals(successValue, 0)
|
||||
assertEquals(x.value, 1)
|
||||
val failValue = x.compareAndExchange(0, 2)
|
||||
assertEquals(failValue, 1)
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun compareAndSet() {
|
||||
val x = AtomicInt(0)
|
||||
val successValue = x.compareAndSet(0, 1)
|
||||
assertTrue(successValue)
|
||||
assertEquals(x.value, 1)
|
||||
val failValue = x.compareAndSet(0, 2)
|
||||
assertFalse(failValue)
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun smoke() {
|
||||
val atomic = AtomicInt(3)
|
||||
assertEquals(3, atomic.value)
|
||||
atomic.value = 5
|
||||
assertEquals(5, atomic.value)
|
||||
assertEquals(5, atomic.getAndSet(6))
|
||||
assertEquals(6, atomic.value)
|
||||
assertTrue(atomic.compareAndSet(6, 8))
|
||||
assertFalse(atomic.compareAndSet(9, 1))
|
||||
assertEquals(8, atomic.value)
|
||||
assertEquals(8, atomic.getAndAdd(5))
|
||||
assertEquals(13, atomic.value)
|
||||
assertEquals(18, atomic.addAndGet(5))
|
||||
assertEquals(18, atomic.getAndIncrement())
|
||||
assertEquals(19, atomic.value)
|
||||
assertEquals(20, atomic.incrementAndGet())
|
||||
assertEquals(20, atomic.value)
|
||||
assertEquals(20, atomic.getAndDecrement())
|
||||
assertEquals(19, atomic.value)
|
||||
assertEquals(18, atomic.decrementAndGet())
|
||||
assertEquals(18, atomic.value)
|
||||
assertEquals(18, atomic.compareAndExchange(18, 56))
|
||||
assertEquals(56, atomic.compareAndExchange(18, 56))
|
||||
assertEquals(56, atomic.compareAndExchange(18, 56))
|
||||
}
|
||||
}
|
||||
|
||||
class AtomicLongTest {
|
||||
@Test fun ctor() {
|
||||
val x = AtomicLong(0)
|
||||
assertEquals(x.value, 0)
|
||||
}
|
||||
|
||||
@Test fun setter() {
|
||||
val x = AtomicLong(0)
|
||||
x.value = 1
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun addAndGet() {
|
||||
val x = AtomicLong(1)
|
||||
val result = x.addAndGet(2L)
|
||||
assertEquals(result, 1 + 2)
|
||||
assertEquals(x.value, result)
|
||||
}
|
||||
|
||||
@Test fun compareAndExchange() {
|
||||
val x = AtomicLong(0)
|
||||
val successValue = x.compareAndExchange(0, 1)
|
||||
assertEquals(successValue, 0)
|
||||
assertEquals(x.value, 1)
|
||||
val failValue = x.compareAndExchange(0, 2)
|
||||
assertEquals(failValue, 1)
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun compareAndSet() {
|
||||
val x = AtomicLong(0)
|
||||
val successValue = x.compareAndSet(0, 1)
|
||||
assertTrue(successValue)
|
||||
assertEquals(x.value, 1)
|
||||
val failValue = x.compareAndSet(0, 2)
|
||||
assertFalse(failValue)
|
||||
assertEquals(x.value, 1)
|
||||
}
|
||||
|
||||
@Test fun smoke() {
|
||||
val atomic = AtomicLong(1424920024888900000)
|
||||
assertEquals(1424920024888900000, atomic.value)
|
||||
atomic.value = 2424920024888900000
|
||||
assertEquals(2424920024888900000, atomic.value)
|
||||
assertEquals(2424920024888900000, atomic.getAndSet(3424920024888900000))
|
||||
assertEquals(3424920024888900000, atomic.value)
|
||||
assertTrue(atomic.compareAndSet(3424920024888900000, 4424920024888900000))
|
||||
assertFalse(atomic.compareAndSet(9, 1))
|
||||
assertEquals(4424920024888900000, atomic.value)
|
||||
assertEquals(4424920024888900000, atomic.getAndAdd(100000))
|
||||
assertEquals(4424920024889000000, atomic.value)
|
||||
assertEquals(4424920024890000000, atomic.addAndGet(1000000L))
|
||||
assertEquals(4424920024890000000, atomic.getAndIncrement())
|
||||
assertEquals(4424920024890000001, atomic.value)
|
||||
assertEquals(4424920024890000002, atomic.incrementAndGet())
|
||||
assertEquals(4424920024890000002, atomic.value)
|
||||
assertEquals(4424920024890000002, atomic.getAndDecrement())
|
||||
assertEquals(4424920024890000001, atomic.value)
|
||||
assertEquals(4424920024890000000, atomic.decrementAndGet())
|
||||
assertEquals(4424920024890000000, atomic.value)
|
||||
assertEquals(4424920024890000000, atomic.compareAndExchange(4424920024890000000, 5424920024890000000))
|
||||
assertEquals(5424920024890000000, atomic.compareAndExchange(18, 56))
|
||||
assertEquals(5424920024890000000, atomic.compareAndExchange(18, 56))
|
||||
}
|
||||
}
|
||||
|
||||
class AtomicReferenceTest {
|
||||
@Test fun ctor() {
|
||||
val x = AtomicReference(Data(1))
|
||||
assertEquals(x.value, Data(1))
|
||||
}
|
||||
|
||||
@Test fun setter() {
|
||||
val x = AtomicReference<Data>(Data(1))
|
||||
x.value = Data(2)
|
||||
assertEquals(x.value, Data(2))
|
||||
}
|
||||
|
||||
@Test fun compareAndExchange() {
|
||||
val initial = Data(1)
|
||||
val new = Data(2)
|
||||
val x = AtomicReference<Data>(initial)
|
||||
val successValue = x.compareAndExchange(initial, new)
|
||||
assertEquals(successValue, initial)
|
||||
assertEquals(x.value, new)
|
||||
val failValue = x.compareAndExchange(initial, Data(3))
|
||||
assertEquals(failValue, new)
|
||||
assertEquals(x.value, new)
|
||||
}
|
||||
|
||||
@Test fun compareAndSet() {
|
||||
val initial = Data(1)
|
||||
val new = Data(2)
|
||||
val x = AtomicReference<Data>(initial)
|
||||
val successValue = x.compareAndSet(initial, new)
|
||||
assertTrue(successValue)
|
||||
assertEquals(x.value, new)
|
||||
val failValue = x.compareAndSet(initial, Data(2))
|
||||
assertFalse(failValue)
|
||||
assertEquals(x.value, new)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun smoke() {
|
||||
val atomic = AtomicReference<List<Data>>(listOf(Data(1), Data(2), Data(3)))
|
||||
assertEquals(listOf(Data(1), Data(2), Data(3)), atomic.value)
|
||||
atomic.value = listOf(Data(1), Data(2), Data(1))
|
||||
assertEquals(listOf(Data(1), Data(2), Data(1)), atomic.value)
|
||||
assertEquals(listOf(Data(1), Data(2), Data(1)), atomic.getAndSet(listOf(Data(1), Data(1), Data(1))))
|
||||
assertEquals(listOf(Data(1), Data(1), Data(1)), atomic.value)
|
||||
var cur = atomic.value
|
||||
assertTrue(atomic.compareAndSet(cur, listOf(Data(2), Data(2), Data(2))))
|
||||
assertFalse(atomic.compareAndSet(listOf(Data(1), Data(1), Data(1)), listOf(Data(2), Data(2), Data(2))))
|
||||
assertEquals(listOf(Data(2), Data(2), Data(2)), atomic.value)
|
||||
cur = atomic.value
|
||||
assertEquals(listOf(Data(2), Data(2), Data(2)), atomic.compareAndExchange(cur, listOf(Data(3), Data(3), Data(3))))
|
||||
assertEquals(listOf(Data(3), Data(3), Data(3)), atomic.compareAndExchange(cur, listOf(Data(4), Data(4), Data(4))))
|
||||
assertEquals(listOf(Data(3), Data(3), Data(3)), atomic.compareAndExchange(cur, listOf(Data(3), Data(3), Data(3))))
|
||||
}
|
||||
}
|
||||
|
||||
class AtomicNativePtrTest {
|
||||
@Test fun smoke() {
|
||||
val atomic = AtomicNativePtr(NativePtr.NULL)
|
||||
assertEquals(NativePtr.NULL, atomic.value)
|
||||
atomic.value = NativePtr.NULL.plus(10L)
|
||||
assertEquals(10L, atomic.value.toLong())
|
||||
assertTrue(atomic.compareAndSet(NativePtr.NULL.plus(10L), NativePtr.NULL.plus(20L)))
|
||||
assertEquals(20L, atomic.value.toLong())
|
||||
assertFalse(atomic.compareAndSet(NativePtr.NULL.plus(10L), NativePtr.NULL.plus(20L)))
|
||||
assertEquals(20L, atomic.value.toLong())
|
||||
assertEquals(NativePtr.NULL.plus(20L), atomic.compareAndExchange(NativePtr.NULL.plus(20L), NativePtr.NULL.plus(30L)))
|
||||
assertEquals(NativePtr.NULL.plus(30L), atomic.compareAndExchange(NativePtr.NULL.plus(20L), NativePtr.NULL.plus(40L)))
|
||||
assertEquals(NativePtr.NULL.plus(30L), atomic.compareAndExchange(NativePtr.NULL.plus(20L), NativePtr.NULL.plus(50L)))
|
||||
assertEquals(30L, atomic.getAndSet(NativePtr.NULL.plus(55L)).toLong())
|
||||
assertEquals(55L, atomic.value.toLong())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user