// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package class_inliner_lambda_j_style

private var COUNT = 0

fun nextInt() = COUNT++
fun next() = "${nextInt()}".padStart(3, '0')

fun main(args: Array<String>) {
    testStateless()
    testStateful()
    testStateful2()
    testStateful3()
}

fun testStateless() {
    SamIface.Consumer.consume { "123" }
    SamIface.Consumer.consume { "ABC" }
    SamIface.Consumer.consume {
        var x = 0
        println("A: ${x++}")
        println("B: ${x++}")
        println("C: ${x++}")
        println("D: ${x++}")
        println("E: ${x++}")
        "outer + $x"
    }
}

fun testStateful() {
    var someVariable = 0

    SamIface.Consumer.consume {
        println("A: someVariable = $someVariable")
        someVariable += 1
        "B: someVariable = $someVariable"
    }
    SamIface.Consumer.consume {
        SamIface.Consumer.consume {
            println("E: someVariable = $someVariable")
            someVariable += 1
            "F: someVariable = $someVariable"
        }
        for (i in 1..20) {
            someVariable += 1
            if (i % 4 == 0) {
                println("G: someVariable = $someVariable")
            }
        }
        someVariable += 1
        "H: someVariable = $someVariable"
    }
    SamIface.Consumer.consumeBig {
        println("I: someVariable = $someVariable")
        someVariable += 1
        "J: someVariable = $someVariable"
    }
}

fun testStateful2() {
    var someVariable = 0
    SamIface.Consumer.consumeBig {
        println("[Z] A: someVariable = $someVariable")
        someVariable += 1
        println("[Z] B: someVariable = $someVariable")
        someVariable += 1
        println("[Z] C: someVariable = $someVariable")
        someVariable += 1
        println("[Z] D: someVariable = $someVariable")
        someVariable += 1
        println("[Z] E: someVariable = $someVariable")
        someVariable += 1
        "[Z] F: someVariable = $someVariable"
    }
}

fun testStateful3() {
    var someVariable = 0
    SamIface.Consumer.consumeBig {
        println("[W] A: someVariable = $someVariable")
        someVariable += 1
        println("[W] B: someVariable = $someVariable")
        someVariable += 1
        println("[W] C: someVariable = $someVariable")
        someVariable += 1
        println("[W] D: someVariable = $someVariable")
        someVariable += 1
        println("[W] E: someVariable = $someVariable")
        someVariable += 1
        "[W] F: someVariable = $someVariable"
    }
}
