blob: 564c79aad3bd399f542dc5acf63989d860fdd3e0 [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") }))
}