package foo class A(val value: Int) : Comparable { override public fun compareTo(other: A): Int = other.value compareTo value } class B(val value: Int) fun testExtensionFunctionAsCompareTo() { val compareTo: B.( B ) -> Int = { (other) -> other.value compareTo this.value } val x: B = B(100) val y: B = B(200) assertEquals(false, x < y, "ext fun: x < y") assertEquals(true, x > y, "ext fun: x > y") assertEquals(1, x compareTo y, "ext fun: x compareTo y") } fun testMethodAsCompareTo() { val x: A = A(100) val y: A = A(200) assertEquals(false, x < y, "meth: x < y") assertEquals(true, x > y, "meth: x > y") assertEquals(1, x compareTo y, "meth: x compareTo y") assertEquals(false, (x: Comparable) < y, "meth: (x: Comparable) < y") assertEquals(true, (x: Comparable) > y, "meth: (x: Comparable) > y") assertEquals(1, (x: Comparable) compareTo y, "meth: (x: Comparable) compareTo y") } fun box(): String { testExtensionFunctionAsCompareTo() testMethodAsCompareTo() return "OK" }