package foo fun box(): String { try { testCompanionObjectAccess() testInCall() testDoubleConstants() testFloatConstants() testLocalFun() testTopLevelFun() testVarTopField() } catch (e: Throwable) { return "Error: \n" + e } return "OK" } fun testCompanionObjectAccess() { val i = Int val d = Double val f = Float val l = Long val sh = Short val b = Byte val ch = Char val st = String val en = Enum } fun testInCall() { test(Int) test(Double) test(Float) test(Long) test(Short) test(Byte) test(Char) test(String) test(Enum) } fun testDoubleConstants() { val pi = Double.POSITIVE_INFINITY val ni = Double.NEGATIVE_INFINITY val nan = Double.NaN myAssertEquals(pi, Double.POSITIVE_INFINITY) myAssertEquals(ni, Double.NEGATIVE_INFINITY) } fun testFloatConstants() { val pi = Float.POSITIVE_INFINITY val ni = Float.NEGATIVE_INFINITY val nan = Float.NaN myAssertEquals(pi, Float.POSITIVE_INFINITY) myAssertEquals(ni, Float.NEGATIVE_INFINITY) } fun testLocalFun() { fun Int.Companion.LocalFun() : String = "LocalFun" myAssertEquals("LocalFun", Int.LocalFun()) } fun testTopLevelFun() { myAssertEquals("TopFun", Int.TopFun()) } fun testVarTopField() { myAssertEquals(0, Int.TopField) Int.TopField++ myAssertEquals(1, Int.TopField) Int.TopField += 5 myAssertEquals(6, Int.TopField) } fun test(a: Any) {} var _field: Int = 0 var Int.Companion.TopField : Int get() = _field set(value) { _field = value }; fun Int.Companion.TopFun() : String = "TopFun" fun myAssertEquals(a: T, b: T) { if (a != b) throw Exception("$a != $b") }