| // WITH_STDLIB | |
| // LANGUAGE: +CustomEqualsInValueClasses | |
| // TARGET_BACKEND: JVM | |
| // CHECK_BYTECODE_LISTING | |
| interface I { | |
| fun getVal(): Int | |
| } | |
| @JvmInline | |
| value class IC1(val x: Int) : I { | |
| override fun getVal(): Int { | |
| return x | |
| } | |
| fun equals(other: IC1): Boolean { | |
| return x == other.x | |
| } | |
| override fun equals(other: Any?): Boolean { | |
| if (other !is I) { | |
| return false | |
| } | |
| return getVal() == other.getVal() | |
| } | |
| override fun hashCode(): Int { | |
| return getVal() | |
| } | |
| } | |
| @JvmInline | |
| value class IC2(val y: Int) : I { | |
| override fun getVal(): Int { | |
| return y * 10 | |
| } | |
| fun equals(other: IC2): Boolean { | |
| return y == other.y | |
| } | |
| override fun equals(other: Any?): Boolean { | |
| if (other !is I) { | |
| return false | |
| } | |
| return getVal() == other.getVal() | |
| } | |
| override fun hashCode(): Int { | |
| return getVal() | |
| } | |
| } | |
| fun box(): String = if (setOf(IC1(10), IC2(1)).size == 1) "OK" else "Fail" |