fun t1() : Boolean { val s1 : String? = "sff" val s2 : String? = null return s1?.length == 3 && s2?.length == null } fun t2() : Boolean { val c1: C? = C(1) val c2: C? = null return c1?.x == 1 && c2?.x == null } fun t3() { val d: D = D("s") val x = d?.s if (!(d?.s == "s")) throw AssertionError() } fun t4() { val e: E? = E() if (!(e?.bar() == e)) throw AssertionError() val x = e?.foo() } fun box() : String { if(!t1 ()) return "fail" if(!t2 ()) return "fail" t3() t4() return "OK" } class C(val x: Int) class D(val s: String) class E() { fun foo() = 1 fun bar() = this }