| // KT-66087 | |
| // IGNORE_BACKEND: JS_IR, JS_IR_ES6 | |
| // WITH_STDLIB | |
| import kotlin.test.* | |
| object A { | |
| init { | |
| assertAUninitialized() | |
| } | |
| val a1 = 7 | |
| val a2 = 12 | |
| } | |
| // Check that A is initialized dynamically. | |
| fun assertAUninitialized() { | |
| assertEquals(0, A.a1, "0 != A.a1") | |
| assertEquals(0, A.a2, "0 != A.a2") | |
| } | |
| object B { | |
| init { | |
| assertBUninitialized() | |
| } | |
| val b1 = A.a2 | |
| val b2 = C.c1 | |
| } | |
| // Check that B is initialized dynamically. | |
| fun assertBUninitialized() { | |
| assertEquals(0, B.b1, "0 != B.b1") | |
| assertEquals(0, B.b2, "0 != B.b2") | |
| } | |
| object C { | |
| init { | |
| assertCUninitialized() | |
| } | |
| val c1 = 42 | |
| val c2 = A.a1 | |
| val c3 = B.b1 | |
| val c4 = B.b2 | |
| } | |
| // Check that C is initialized dynamically. | |
| fun assertCUninitialized() { | |
| assertEquals(0, C.c1, "0 != C.c1") | |
| assertEquals(0, C.c2, "0 != C.c2") | |
| assertEquals(0, C.c3, "0 != C.c3") | |
| assertEquals(0, C.c4, "0 != C.c4") | |
| } | |
| fun box(): String { | |
| assertEquals(A.a1, C.c2, "A.a1 != C.c2") | |
| assertEquals(A.a2, C.c3, "A.a2 != C.c3") | |
| assertEquals(C.c1, C.c4, "C.c1 != C.c4") | |
| return "OK" | |
| } |