// WITH_STDLIB // MODULE: lib1 // FILE: Demo.kt var DemoSetterCalls = 0 var DemoGetterCalls = 0 var DemoOpenSetterCalls = 0 var DemoOpenGetterCalls = 0 abstract class Demo { internal fun demoFun(): Int = 1 internal val demoVal: Int = 2 internal val demoValGet: Int get() = 3 internal var demoVarSetGet: Int = 4 set(value) { ++DemoSetterCalls; field = value } get() { ++DemoGetterCalls; return field } internal open fun demoOpenFun(): Int = 5 internal open val demoOpenVal: Int = 6 internal open val demoOpenValGet: Int get() = 7 internal open var demoOpenVarSetGet: Int = 8 set(value) { ++DemoOpenSetterCalls; field = value } get() { ++DemoOpenGetterCalls; return field } } // FILE: LibDemo.kt var LibDemoOpenSetterCalls = 0 var LibDemoOpenGetterCalls = 0 open class LibDemo : Demo() { override public fun demoOpenFun(): Int = 50 override public val demoOpenVal: Int = 60 override public val demoOpenValGet: Int get() = 70 override public var demoOpenVarSetGet: Int = 80 set(value) { ++LibDemoOpenSetterCalls; field = value } get() { ++LibDemoOpenGetterCalls; return field } } // FILE: TestDemo.kt fun testFun(d: Demo): Int = d.demoFun() fun testVal(d: Demo): Int = d.demoVal fun testValGet(d: Demo): Int = d.demoValGet fun testVarGet(d: Demo): Int = d.demoVarSetGet fun testVarSet(d: Demo, v: Int) { d.demoVarSetGet = v } fun testOpenFun(d: Demo): Int = d.demoOpenFun() fun testOpenVal(d: Demo): Int = d.demoOpenVal fun testOpenValGet(d: Demo): Int = d.demoOpenValGet fun testOpenVarGet(d: Demo): Int = d.demoOpenVarSetGet fun testOpenVarSet(d: Demo, v: Int) { d.demoOpenVarSetGet = v } // MODULE: main(lib1) // FILE: MyDemo.kt var MyDemoSetterCalls = 0 var MyDemoGetterCalls = 0 var MyDemoOpenSetterCalls = 0 var MyDemoOpenGetterCalls = 0 class MyDemo : Demo() { fun demoFun(): Int = 100 val demoVal: Int = 200 val demoValGet: Int get() = 300 var demoVarSetGet: Int = 400 set(value) { ++MyDemoSetterCalls; field = value } get() { ++MyDemoGetterCalls; return field } fun demoOpenFun(): Int = 500 val demoOpenVal: Int = 600 val demoOpenValGet: Int get() = 700 var demoOpenVarSetGet: Int = 800 set(value) { ++MyDemoOpenSetterCalls; field = value } get() { ++MyDemoOpenGetterCalls; return field } } // FILE: MyDemo2.kt var MyDemo2SetterCalls = 0 var MyDemo2GetterCalls = 0 var MyDemo2OpenSetterCalls = 0 var MyDemo2OpenGetterCalls = 0 class MyDemo2 : LibDemo() { fun demoFun(): Int = 1000 val demoVal: Int = 2000 val demoValGet: Int get() = 3000 var demoVarSetGet: Int = 4000 set(value) { ++MyDemo2SetterCalls; field = value } get() { ++MyDemo2GetterCalls; return field } override fun demoOpenFun(): Int = 5000 override val demoOpenVal: Int = 6000 override val demoOpenValGet: Int get() = 7000 override var demoOpenVarSetGet: Int = 8000 set(value) { ++MyDemo2OpenSetterCalls; field = value } get() { ++MyDemo2OpenGetterCalls; return field } } // FILE: Box.kt import kotlin.test.assertEquals fun resetCounters() { DemoSetterCalls = 0 DemoGetterCalls = 0 DemoOpenSetterCalls = 0 DemoOpenGetterCalls = 0 LibDemoOpenSetterCalls = 0 LibDemoOpenGetterCalls = 0 MyDemoSetterCalls = 0 MyDemoGetterCalls = 0 MyDemoOpenSetterCalls = 0 MyDemoOpenGetterCalls = 0 MyDemo2SetterCalls = 0 MyDemo2GetterCalls = 0 MyDemo2OpenSetterCalls = 0 MyDemo2OpenGetterCalls = 0 } fun testMyDemo() { resetCounters() val myDemo = MyDemo() assertEquals(testFun(myDemo), 1) assertEquals(testVal(myDemo), 2) assertEquals(testValGet(myDemo), 3) assertEquals(testVarGet(myDemo), 4) testVarSet(myDemo, -4) assertEquals(testVarGet(myDemo), -4) assertEquals(DemoSetterCalls, 1) assertEquals(DemoGetterCalls, 2) assertEquals(MyDemoSetterCalls, 0) assertEquals(MyDemoGetterCalls, 0) assertEquals(testOpenFun(myDemo), 5) assertEquals(testOpenVal(myDemo), 6) assertEquals(testOpenValGet(myDemo), 7) assertEquals(testOpenVarGet(myDemo), 8) testOpenVarSet(myDemo, -8) assertEquals(testOpenVarGet(myDemo), -8) assertEquals(DemoOpenSetterCalls, 1) assertEquals(DemoOpenGetterCalls, 2) assertEquals(MyDemoOpenSetterCalls, 0) assertEquals(MyDemoOpenGetterCalls, 0) assertEquals(myDemo.demoFun(), 100) assertEquals(myDemo.demoVal, 200) assertEquals(myDemo.demoValGet, 300) assertEquals(myDemo.demoVarSetGet, 400) myDemo.demoVarSetGet = -400 assertEquals(myDemo.demoVarSetGet, -400) assertEquals(DemoSetterCalls, 1) assertEquals(DemoGetterCalls, 2) assertEquals(MyDemoSetterCalls, 1) assertEquals(MyDemoGetterCalls, 2) assertEquals(myDemo.demoOpenFun(), 500) assertEquals(myDemo.demoOpenVal, 600) assertEquals(myDemo.demoOpenValGet, 700) assertEquals(myDemo.demoOpenVarSetGet, 800) myDemo.demoOpenVarSetGet = -800 assertEquals(myDemo.demoOpenVarSetGet, -800) assertEquals(DemoOpenSetterCalls, 1) assertEquals(DemoOpenGetterCalls, 2) assertEquals(MyDemoOpenSetterCalls, 1) assertEquals(MyDemoOpenGetterCalls, 2) } fun testLibDemo() { resetCounters() val libDemo = LibDemo() assertEquals(testFun(libDemo), 1) assertEquals(testVal(libDemo), 2) assertEquals(testValGet(libDemo), 3) assertEquals(testVarGet(libDemo), 4) testVarSet(libDemo, -4) assertEquals(testVarGet(libDemo), -4) assertEquals(DemoSetterCalls, 1) assertEquals(DemoGetterCalls, 2) assertEquals(testOpenFun(libDemo), 50) assertEquals(testOpenVal(libDemo), 60) assertEquals(testOpenValGet(libDemo), 70) assertEquals(testOpenVarGet(libDemo), 80) testOpenVarSet(libDemo, -80) assertEquals(testOpenVarGet(libDemo), -80) assertEquals(LibDemoOpenSetterCalls, 1) assertEquals(LibDemoOpenGetterCalls, 2) assertEquals(DemoOpenSetterCalls, 0) assertEquals(DemoOpenGetterCalls, 0) assertEquals(libDemo.demoOpenFun(), 50) assertEquals(libDemo.demoOpenVal, 60) assertEquals(libDemo.demoOpenValGet, 70) assertEquals(libDemo.demoOpenVarSetGet, -80) libDemo.demoOpenVarSetGet = 88 assertEquals(libDemo.demoOpenVarSetGet, 88) assertEquals(LibDemoOpenSetterCalls, 2) assertEquals(LibDemoOpenGetterCalls, 4) assertEquals(DemoOpenSetterCalls, 0) assertEquals(DemoOpenGetterCalls, 0) } fun testMyDemo2() { resetCounters() val myDemo2 = MyDemo2() assertEquals(testFun(myDemo2), 1) assertEquals(testVal(myDemo2), 2) assertEquals(testValGet(myDemo2), 3) assertEquals(testVarGet(myDemo2), 4) testVarSet(myDemo2, -4) assertEquals(testVarGet(myDemo2), -4) assertEquals(DemoSetterCalls, 1) assertEquals(DemoGetterCalls, 2) assertEquals(MyDemo2SetterCalls, 0) assertEquals(MyDemo2GetterCalls, 0) assertEquals(testOpenFun(myDemo2), 5000) assertEquals(testOpenVal(myDemo2), 6000) assertEquals(testOpenValGet(myDemo2), 7000) assertEquals(testOpenVarGet(myDemo2), 8000) testOpenVarSet(myDemo2, -8000) assertEquals(testOpenVarGet(myDemo2), -8000) assertEquals(MyDemo2OpenSetterCalls, 1) assertEquals(MyDemo2OpenGetterCalls, 2) assertEquals(LibDemoOpenSetterCalls, 0) assertEquals(LibDemoOpenGetterCalls, 0) assertEquals(DemoOpenSetterCalls, 0) assertEquals(DemoOpenGetterCalls, 0) assertEquals(myDemo2.demoFun(), 1000) assertEquals(myDemo2.demoVal, 2000) assertEquals(myDemo2.demoValGet, 3000) assertEquals(myDemo2.demoVarSetGet, 4000) myDemo2.demoVarSetGet = -4000 assertEquals(myDemo2.demoVarSetGet, -4000) assertEquals(DemoSetterCalls, 1) assertEquals(DemoGetterCalls, 2) assertEquals(MyDemo2SetterCalls, 1) assertEquals(MyDemo2GetterCalls, 2) assertEquals(myDemo2.demoOpenFun(), 5000) assertEquals(myDemo2.demoOpenVal, 6000) assertEquals(myDemo2.demoOpenValGet, 7000) assertEquals(myDemo2.demoOpenVarSetGet, -8000) myDemo2.demoOpenVarSetGet = 8888 assertEquals(myDemo2.demoOpenVarSetGet, 8888) assertEquals(MyDemo2OpenSetterCalls, 2) assertEquals(MyDemo2OpenGetterCalls, 4) assertEquals(LibDemoOpenSetterCalls, 0) assertEquals(LibDemoOpenGetterCalls, 0) assertEquals(DemoOpenSetterCalls, 0) assertEquals(DemoOpenGetterCalls, 0) } fun box(): String { testMyDemo() testLibDemo() testMyDemo2() return "OK" }