blob: 42cce3731de90a324736364bf755a268b83a0ce4 [file] [log] [blame]
// 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 lambdas_kstyle_trivial
import lambdas_kstyle_trivial.inner.testInner
private var COUNT = 11
private fun next() = "${COUNT++}"
fun consumeEmpty(l: () -> String) = l()
fun consumeOne(l: (x: String) -> String): String = l(next())
fun consumeTwo(l: (x: String, y: String) -> String): String = l(next(), next())
fun consumeThree(l: (x: String, y: String, z: String) -> String) = l(next(), next(), next())
fun consumeTwentyTwo(l: (v0: String, v1: String, v2: String, v3: String, v4: String,
v5: String, v6: String, v7: String, v8: String, v9: String,
v10: String, v11: String, v12: String, v13: String, v14: String,
v15: String, v16: String, v17: String, v18: String, v19: String,
v20: String, v21: String) -> String) = l(
next(), next(), next(), next(), next(), next(), next(), next(), next(), next(), next(),
next(), next(), next(), next(), next(), next(), next(), next(), next(), next(), next())
fun main(args: Array<String>) {
test()
testInner()
testPrimitive()
testUnit()
}
private fun test() {
testStateless()
}
private fun testStateless() {
println(consumeEmpty { "first empty" })
println(consumeEmpty { "second empty" })
println(consumeOne { _ -> "first single" })
println(consumeOne { _ -> "second single" })
println(consumeOne { _ -> "third single" })
println(consumeOne { x ->
try {
throw RuntimeException("exception#$x")
} catch (e: RuntimeException) {
"caught: ${e.message}"
} catch (e: Exception) {
"NEVER"
}
})
println(consumeOne { x -> x })
println(consumeTwo { x, y -> x + "-" + y })
println(consumeThree { x, y, z -> x + y + z })
println(consumeThree { _, _, _ -> "one-two-three" })
println(consumeTwentyTwo { _, _, _, _, _, _, _, _, _, _, _,
_, _, _, _, _, _, _, _, _, _, _ ->
"one-two-...-twentythree"
})
println(consumeTwentyTwo { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
v12, v13, v14, v15, v16, v17, v18, v19, v20, v21 ->
v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10 + v11 +
v12 + v13 + v14 + v15 + v16 + v17 + v18 + v19 + v20 + v21
})
}
private fun consumePrimitive(i: Int, l: (Int, Short) -> Int) = l(i, 5)
private fun testPrimitive() {
println(consumePrimitive(1, { x, y -> x }))
println(consumePrimitive(2, { x, y -> y.toInt() }))
println(consumePrimitive(3, { x, y -> x + y }))
println(consumePrimitive(4, { x, y -> x * y }))
val l: (Int, Short) -> Int = { x, y -> x / y }
println(l(100, 20))
}
private fun consumeUnit(i: Int, l: (Int, Short) -> Unit) = l(i, 10)
private fun testUnit() {
println(consumeUnit(11, { x, y -> println() }))
println(consumeUnit(12, { x, y -> println(y) }))
println(consumeUnit(13, { x, y -> println(x) }))
println(consumeUnit(14, { x, y -> println("$x -- $y") }))
}