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"
}