88f293d4a9
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
77 lines
2.7 KiB
Kotlin
Vendored
77 lines
2.7 KiB
Kotlin
Vendored
// TARGET_BACKEND: JVM_IR
|
|
// WITH_REFLECT
|
|
// LANGUAGE: +ValueClasses
|
|
import kotlin.test.assertEquals
|
|
|
|
interface IFoo {
|
|
fun fooFun(z: Z): Z
|
|
var fooVar: Z
|
|
}
|
|
|
|
var global = Z(0U, 0)
|
|
|
|
|
|
@JvmInline
|
|
value class Z(val x1: UInt, val x2: Int) : IFoo {
|
|
|
|
override fun fooFun(z: Z): Z = Z(z.x1 + x1, z.x2 + x2)
|
|
|
|
override var fooVar: Z
|
|
get() = Z(global.x1 + x1, global.x2 + x2)
|
|
set(value) {
|
|
global = Z(value.x1 + x1, value.x2 + x2)
|
|
}
|
|
|
|
fun barFun(z: Z): Z = Z(z.x1 * 100U + x1, z.x2 * 100 + x2)
|
|
|
|
var barVar: Z
|
|
get() = Z(global.x1 * 100U + x1, global.x2 * 100 + x2)
|
|
set(value) {
|
|
global = Z(value.x1 * 100U + x1, value.x2 * 100 + x2)
|
|
}
|
|
}
|
|
|
|
|
|
fun box(): String {
|
|
val fooFunR = Z::fooFun
|
|
assertEquals(Z(53U, -53), fooFunR.callBy(mapOf(fooFunR.parameters[0] to Z(42U, -42), fooFunR.parameters[1] to Z(11U, -11))))
|
|
|
|
val fooFunBR = Z(42U, -42)::fooFun
|
|
assertEquals(Z(142U, -142), fooFunBR.callBy(mapOf(fooFunBR.parameters[0] to Z(100U, -100))))
|
|
|
|
global = Z(0U, 0)
|
|
val fooVarR = Z::fooVar
|
|
assertEquals(Z(42U, -42), fooVarR.callBy(mapOf(fooVarR.parameters[0] to Z(42U, -42))))
|
|
assertEquals(Z(42U, -42), fooVarR.getter.callBy(mapOf(fooVarR.getter.parameters[0] to Z(42U, -42))))
|
|
fooVarR.setter.callBy(mapOf(fooVarR.setter.parameters[0] to Z(42U, -42), fooVarR.setter.parameters[1] to Z(1U, -1)))
|
|
assertEquals(Z(43U, -43), global)
|
|
|
|
global = Z(100U, -100)
|
|
val fooVarBR = Z(42U, -42)::fooVar
|
|
assertEquals(Z(142U, -142), fooVarBR.callBy(mapOf()))
|
|
assertEquals(Z(142U, -142), fooVarBR.getter.callBy(mapOf()))
|
|
fooVarBR.setter.callBy(mapOf(fooVarBR.setter.parameters[0] to Z(1U, -1)))
|
|
assertEquals(Z(43U, -43), global)
|
|
|
|
val barFunR = Z::barFun
|
|
assertEquals(Z(1142U, -1142), barFunR.callBy(mapOf(barFunR.parameters[0] to Z(42U, -42), barFunR.parameters[1] to Z(11U, -11))))
|
|
|
|
val barFunBR = Z(42U, -42)::barFun
|
|
assertEquals(Z(2242U, -2242), barFunBR.callBy(mapOf(barFunBR.parameters[0] to Z(22U, -22))))
|
|
|
|
global = Z(1U, -1)
|
|
val barVarR = Z::barVar
|
|
assertEquals(Z(142U, -142), barVarR.callBy(mapOf(barVarR.parameters[0] to Z(42U, -42))))
|
|
assertEquals(Z(142U, -142), barVarR.getter.callBy(mapOf(barVarR.getter.parameters[0] to Z(42U, -42))))
|
|
barVarR.setter.callBy(mapOf(barVarR.setter.parameters[0] to Z(42U, -42), barVarR.setter.parameters[1] to Z(3U, -3)))
|
|
assertEquals(Z(342U, -342), global)
|
|
|
|
global = Z(2U, -2)
|
|
val barVarBR = Z(42U, -42)::barVar
|
|
assertEquals(Z(242U, -242), barVarBR.callBy(mapOf()))
|
|
assertEquals(Z(242U, -242), barVarBR.getter.callBy(mapOf()))
|
|
barVarBR.setter.callBy(mapOf(barVarBR.setter.parameters[0] to Z(4U, -4)))
|
|
assertEquals(Z(442U, -442), global)
|
|
|
|
return "OK"
|
|
} |