// LANGUAGE: +ProperComputationOrderOfTailrecDefaultParameters

var counter = 0
fun inc() = counter++

tailrec fun test(x: Int = 0, y: Int = inc(), z: Int = inc()) {
    if (x * 2 != y || z - y != 1)
        throw IllegalArgumentException("x=$x y=$y z=$z")

    if (x < 100000)
        test(x + 1)
}

fun box() : String {
    test()

    counter = 4
    test(x = 1, y = 2, z = 3)

    counter = 0
    test(-1, -2, -1)

    counter = 3
    test(1, 2)

    counter = 1
    test(y = 0)

    counter = 2
    test(x = 1)

    return "OK"
}