| // 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") })) |
| } |