blob: 6ae170a719042cafa73f19b6c4f475cb5453766c [file]
@file:OptIn(ExperimentalVersionOverloading::class)
tailrec fun versionedTailrec(
n: Int = 10,
@IntroducedAt("1") step: Int = 2,
@IntroducedAt("2") adjust: Int = step - 1,
@IntroducedAt("2") guard: Boolean = true,
): Int = when {
!guard -> -1
n <= 0 -> adjust
else -> versionedTailrec(n - step, step, adjust, guard)
}
fun box(): String {
if (versionedTailrec() != 1) return "FAIL default"
if (versionedTailrec(5) != 1) return "FAIL first"
if (versionedTailrec(5, 2) != 1) return "FAIL second"
if (versionedTailrec(5, 2, 9) != 9) return "FAIL third"
if (versionedTailrec(5, 2, 9, false) != -1) return "FAIL all"
return "OK"
}