1 /* 2 * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.atomicfu.test 6 7 import kotlinx.atomicfu.atomic 8 import kotlin.test.Test 9 10 class AA(val value: Int) { 11 val b = B(value + 1) 12 val c = C(D(E(value + 1))) 13 updateToBnull14 fun updateToB(affected: Any): Boolean { 15 (affected as AtomicState).state.compareAndSet(this, b) 16 return (affected.state.value is B && (affected.state.value as B).value == value + 1) 17 } 18 manyPropertiesnull19 fun manyProperties(affected: Any): Boolean { 20 (affected as AtomicState).state.compareAndSet(this, c.d.e) 21 return (affected.state.value is E && (affected.state.value as E).x == value + 1) 22 } 23 } 24 25 class B (val value: Int) 26 class C (val d: D) 27 class D (val e: E) 28 class E (val x: Int) 29 30 31 class AtomicState(value: Any) { 32 val state = atomic<Any?>(value) 33 } 34 35 class ScopeTest { 36 @Test scopeTestnull37 fun scopeTest() { 38 val a = AA(0) 39 val affected: Any = AtomicState(a) 40 check(a.updateToB(affected)) 41 val a1 = AA(0) 42 val affected1: Any = AtomicState(a1) 43 check(a1.manyProperties(affected1)) 44 } 45 }