blob: 27b887755c4d2065ba292d88c4e8c250b95cffe4 [file]
// WITH_STDLIB
// LANGUAGE: +ValueClasses, +CustomEqualsInValueClasses
// TARGET_BACKEND: JVM_IR
// CHECK_BYTECODE_LISTING
var counter = 0
@JvmInline
value class MFVC(val x: Int, val y: Int) {
fun equals(other: MFVC): Boolean {
counter++
return x == other.x && this.y == other.y
}
override fun equals(other: Any?): Boolean {
counter++
if (other !is MFVC) {
return false
}
return equals(other)
}
override fun hashCode(): Int {
counter++
return x + 13 * y
}
}
fun box(): String {
val mfvc1 = MFVC(1, 2)
val mfvc2 = MFVC(3, 4)
require(mfvc1.equals(mfvc1))
require(!mfvc1.equals(mfvc2))
require(!mfvc2.equals(mfvc1))
require(mfvc2.equals(mfvc2))
require(mfvc1.equals(mfvc1 as Any?))
require(!mfvc1.equals(mfvc2 as Any?))
require(!mfvc2.equals(mfvc1 as Any?))
require(mfvc2.equals(mfvc2 as Any?))
require(mfvc1.hashCode() == 27)
require(mfvc2.hashCode() == 55)
require(counter == 4 + 2 * 4 + 2)
return "OK"
}