blob: fd5d016b4c814dca1e3c7328b634bb9e086e0824 [file] [log] [blame]
// WITH_STDLIB
// LANGUAGE: +ValueClasses, +CustomEqualsInValueClasses
// TARGET_BACKEND: JVM_IR
// CHECK_BYTECODE_LISTING
import java.lang.AssertionError
import kotlin.math.abs
@JvmInline
value class IC1(val x: Double) {
fun equals(other: IC1): Boolean {
return abs(x - other.x) < 0.5
}
}
@JvmInline
value class IC2(val x: Int) {
override fun equals(other: Any?): Boolean {
if (other !is IC2) {
return false
}
return abs(x - other.x) < 2
}
}
fun box(): String {
val a1Typed: IC1 = IC1(1.0)
val b1Typed: IC1 = IC1(1.1)
val c1Typed: IC1 = IC1(5.0)
val a1Untyped: Any = a1Typed
val b1Untyped: Any = b1Typed
val c1Untyped: Any = c1Typed
val a2Typed: IC2 = IC2(1)
val b2Typed: IC2 = IC2(2)
val c2Typed: IC2 = IC2(5)
val a2Untyped: Any = a2Typed
val b2Untyped: Any = b2Typed
val c2Untyped: Any = c2Typed
if ((a1Typed == b1Typed) != (a1Untyped == b1Untyped)) return "Fail 1"
if ((a1Typed == c1Typed) != (a1Untyped == c1Untyped)) return "Fail 2"
if ((a2Typed == b2Typed) != (a2Untyped == b2Untyped)) return "Fail 3"
if ((a2Typed == c2Typed) != (a2Untyped == c2Untyped)) return "Fail 4"
return "OK"
}