fa4a4e56f3
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
48 lines
1.2 KiB
Kotlin
Vendored
48 lines
1.2 KiB
Kotlin
Vendored
// 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"
|
|
}
|