kotlinx.atomicfu JVM/IR compiler plugin support

Merge-request: KT-MR-6541
Merged-by: Maria Sokolova <maria.sokolova@jetbrains.com>
This commit is contained in:
mvicsokolova
2022-06-26 07:17:06 +00:00
committed by Space
parent eaad75fd52
commit 8053746ae0
62 changed files with 4249 additions and 349 deletions
@@ -5,59 +5,57 @@ class AtomicArrayTest {
fun testIntArray() {
val A = AtomicArrayClass()
check(A.intArr[0].compareAndSet(0, 3))
check(A.intArr[1].value == 0)
assertTrue(A.intArr[0].compareAndSet(0, 3))
assertEquals(0, A.intArr[1].value)
A.intArr[0].lazySet(5)
check(A.intArr[0].value + A.intArr[1].value + A.intArr[2].value == 5)
check(A.intArr[0].compareAndSet(5, 10))
check(A.intArr[0].getAndDecrement() == 10)
check(A.intArr[0].value == 9)
assertEquals(5, A.intArr[0].value + A.intArr[1].value + A.intArr[2].value)
assertTrue(A.intArr[0].compareAndSet(5, 10))
assertEquals(10, A.intArr[0].getAndDecrement())
assertEquals(9, A.intArr[0].value)
A.intArr[2].value = 2
check(A.intArr[2].value == 2)
check(A.intArr[2].compareAndSet(2, 34))
check(A.intArr[2].value == 34)
assertEquals(2, A.intArr[2].value)
assertTrue(A.intArr[2].compareAndSet(2, 34))
assertEquals(34, A.intArr[2].value)
}
fun testLongArray() {
val A = AtomicArrayClass()
A.longArr[0].value = 2424920024888888848
check(A.longArr[0].value == 2424920024888888848)
assertEquals(2424920024888888848, A.longArr[0].value)
A.longArr[0].lazySet(8424920024888888848)
check(A.longArr[0].value == 8424920024888888848)
assertEquals(8424920024888888848, A.longArr[0].value)
val ac = A.longArr[0].value
A.longArr[3].value = ac
check(A.longArr[3].getAndSet(8924920024888888848) == 8424920024888888848)
check(A.longArr[3].value == 8924920024888888848)
assertEquals(8424920024888888848, A.longArr[3].getAndSet(8924920024888888848))
assertEquals(8924920024888888848, A.longArr[3].value)
val ac1 = A.longArr[3].value
A.longArr[4].value = ac1
check(A.longArr[4].incrementAndGet() == 8924920024888888849)
check(A.longArr[4].value == 8924920024888888849)
check(A.longArr[4].getAndDecrement() == 8924920024888888849)
check(A.longArr[4].value == 8924920024888888848)
assertEquals(8924920024888888849, A.longArr[4].incrementAndGet())
assertEquals(8924920024888888849, A.longArr[4].value)
assertEquals(8924920024888888849, A.longArr[4].getAndDecrement())
assertEquals(8924920024888888848, A.longArr[4].value)
A.longArr[4].value = 8924920024888888848
check(A.longArr[4].getAndAdd(100000000000000000) == 8924920024888888848)
assertEquals(8924920024888888848, A.longArr[4].getAndAdd(100000000000000000))
val ac2 = A.longArr[4].value
A.longArr[1].value = ac2
check(A.longArr[1].value == 9024920024888888848)
check(A.longArr[1].addAndGet(-9223372036854775807) == -198452011965886959)
check(A.longArr[1].value == -198452011965886959)
check(A.longArr[1].incrementAndGet() == -198452011965886958)
check(A.longArr[1].value == -198452011965886958)
check(A.longArr[1].decrementAndGet() == -198452011965886959)
check(A.longArr[1].value == -198452011965886959)
assertEquals(9024920024888888848, A.longArr[1].value)
assertEquals(-198452011965886959, A.longArr[1].addAndGet(-9223372036854775807))
assertEquals(-198452011965886959, A.longArr[1].value)
assertEquals(-198452011965886958, A.longArr[1].incrementAndGet())
assertEquals(-198452011965886958, A.longArr[1].value)
assertEquals(-198452011965886959, A.longArr[1].decrementAndGet())
assertEquals(-198452011965886959, A.longArr[1].value)
}
fun testBooleanArray() {
val A = AtomicArrayClass()
check(!A.booleanArr[1].value)
A.booleanArr[1].compareAndSet(false, true)
assertFalse(A.booleanArr[1].value)
assertTrue(A.booleanArr[1].compareAndSet(false, true))
A.booleanArr[0].lazySet(true)
check(!A.booleanArr[2].getAndSet(true))
check(A.booleanArr[0].value && A.booleanArr[1].value && A.booleanArr[2].value)
assertFalse(A.booleanArr[2].getAndSet(true))
assertTrue(A.booleanArr[0].value && A.booleanArr[1].value && A.booleanArr[2].value)
A.booleanArr[0].value = false
check(!A.booleanArr[0].value)
assertFalse(A.booleanArr[0].value)
}
fun testRefArray() {
@@ -65,14 +63,27 @@ class AtomicArrayTest {
val a2 = ARef(2)
val a3 = ARef(3)
A.refArr[0].value = a2
check(A.refArr[0].value!!.n == 2)
check(A.refArr[0].compareAndSet(a2, a3))
check(A.refArr[0].value!!.n == 3)
assertEquals(2, A.refArr[0].value!!.n)
assertTrue(A.refArr[0].compareAndSet(a2, a3))
assertEquals(3, A.refArr[0].value!!.n)
val r0 = A.refArr[0].value
A.refArr[3].value = r0
check(A.refArr[3].value!!.n == 3)
assertEquals(3, A.refArr[3].value!!.n)
val a = A.a.value
check(A.refArr[3].compareAndSet(a3, a))
assertTrue(A.refArr[3].compareAndSet(a3, a))
}
fun testAnyArray() {
val A = AtomicArrayClass()
val s1 = "aaa"
val s2 = "bbb"
A.anyArr[0].value = s1
assertEquals("aaa", A.anyArr[0].value)
assertTrue(A.anyArr[0].compareAndSet(s1, s2))
assertEquals("bbb", A.anyArr[0].value)
val r0 = A.anyArr[0].value
A.anyArr[3].value = r0
assertEquals("bbb", A.anyArr[3].value)
}
}
@@ -93,5 +104,6 @@ fun box(): String {
testClass.testLongArray()
testClass.testBooleanArray()
testClass.testRefArray()
testClass.testAnyArray()
return "OK"
}