var p: Int = 0
val arr = intArrayOf(1, 2, 3)

class C {
    var p: Int = 0
    operator fun get(i: Int) = i
    operator fun set(i: Int, value: Int) {}
}

object O {
    var p: Int = 0
    operator fun get(i: Int) = i
    operator fun set(i: Int, value: Int) {}
}

fun testVarPrefix() {
    var x = 0
    val x1 = ++x
    val x2 = --x
}

fun testVarPostfix() {
    var x = 0
    val x1 = x++
    val x2 = x--
}

fun testPropPrefix() {
    val p1 = ++p
    val p2 = --p
}

fun testPropPostfix() {
    val p1 = p++
    val p2 = p--
}

fun testArrayPrefix() {
    val a1 = ++arr[0]
    val a2 = --arr[0]
}

fun testArrayPostfix() {
    val a1 = arr[0]++
    val a2 = arr[0]--
}


fun testClassPropPrefix() {
    val p1 = ++C().p
    val p2 = --C().p
}

fun testClassPropPostfix() {
    val p1 = C().p++
    val p2 = C().p--
}

fun testClassOperatorPrefix() {
    val a1 = ++C()[0]
    val a2 = --C()[0]
}

fun testClassOperatorPostfix() {
    val a1 = C()[0]++
    val a2 = C()[0]--
}

fun testObjectPropPrefix() {
    val p1 = ++O.p
    val p2 = --O.p
}

fun testObjectPropPostfix() {
    val p1 = O.p++
    val p2 = O.p--
}

fun testObjectOperatorPrefix() {
    val a1 = ++O[0]
    val a2 = --O[0]
}

fun testObjectOperatorPostfix() {
    val a1 = O[0]++
    val a2 = O[0]--
}
