blob: cec5c116c3c9d577d6685879c84382a8dbe8fb9c [file] [log] [blame]
/*
* Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.atomicfu.test
import kotlinx.atomicfu.*
import kotlin.test.*
import kotlin.math.*
class ArithmeticTest {
@Test
fun testInt() {
val a = IntArithmetic()
check(a.x == 0)
check(a._x.getAndSet(3) == 0)
check(a._x.compareAndSet(3, 8))
a._x.lazySet(1)
check(a.x == 1)
check(a._x.getAndSet(2) == 1)
check(a.x == 2)
check(a._x.getAndIncrement() == 2)
check(a.x == 3)
check(a._x.getAndDecrement() == 3)
check(a.x == 2)
check(a._x.getAndAdd(2) == 2)
check(a.x == 4)
check(a._x.addAndGet(3) == 7)
check(a.x == 7)
check(a._x.incrementAndGet() == 8)
check(a.x == 8)
check(a._x.decrementAndGet() == 7)
check(a.x == 7)
a._x.compareAndSet(7, 10)
}
@Test
fun testLong() {
val a = LongArithmetic()
check(a.z.value == 2424920024888888848)
a.z.lazySet(8424920024888888848)
check(a.z.value == 8424920024888888848)
check(a.z.getAndSet(8924920024888888848) == 8424920024888888848)
check(a.z.value == 8924920024888888848)
check(a.z.incrementAndGet() == 8924920024888888849)
check(a.z.value == 8924920024888888849)
check(a.z.getAndDecrement() == 8924920024888888849)
check(a.z.value == 8924920024888888848)
check(a.z.getAndAdd(100000000000000000) == 8924920024888888848)
check(a.z.value == 9024920024888888848)
check(a.z.addAndGet(-9223372036854775807) == -198452011965886959)
check(a.z.value == -198452011965886959)
check(a.z.incrementAndGet() == -198452011965886958)
check(a.z.value == -198452011965886958)
check(a.z.decrementAndGet() == -198452011965886959)
check(a.z.value == -198452011965886959)
}
@Test
fun testBoolean() {
val a = BooleanArithmetic()
check(!a.x)
a._x.lazySet(true)
check(a.x)
check(a._x.getAndSet(true))
check(a._x.compareAndSet(true, false))
check(!a.x)
}
}
class IntArithmetic {
val _x = atomic(0)
val x get() = _x.value
}
class LongArithmetic {
val _x = atomic(4294967296)
val x get() = _x.value
val y = atomic(5000000000)
val z = atomic(2424920024888888848)
val max = atomic(9223372036854775807)
}
class BooleanArithmetic {
val _x = atomic(false)
val x get() = _x.value
}