blob: 6475a792b9ded64d5d656de9c6cd659053117b57 [file]
@file:OptIn(ExperimentalVersionOverloading::class)
data class DataWithMiddleVersion(
val first: Int,
@IntroducedAt("1") val middle: String = "M",
val last: String = "K",
)
data class DataWithPrivateVersion(
val first: Int,
@IntroducedAt("1") private val secret: String = "S",
val last: String = "K",
) {
fun describe(): String = "$first/$secret/$last"
}
fun box(): String {
val data = DataWithMiddleVersion(1)
if (data.component1() != 1 || data.component2() != "M" || data.component3() != "K") return "FAIL components"
val (first, middle, last) = data
if (first != 1 || middle != "M" || last != "K") return "FAIL destructuring"
if (data.copy(last = "!") != DataWithMiddleVersion(1, "M", "!")) return "FAIL copy default"
if (data.copy(first = 2, middle = "O", last = "K") != DataWithMiddleVersion(2, "O", "K")) return "FAIL copy all"
val privateData = DataWithPrivateVersion(1)
if (privateData.describe() != "1/S/K") return "FAIL private property"
if (privateData.copy(first = 2).describe() != "2/S/K") return "FAIL private copy"
if (privateData.copy(first = 2) != DataWithPrivateVersion(2)) return "FAIL private equality"
return "OK"
}