| // 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_jstyle_trivial | 
 |  | 
 | import lambdas_jstyle_trivial.Lambdas | 
 | import lambdas_jstyle_trivial.inner.testInner | 
 |  | 
 | private var COUNT = 0 | 
 |  | 
 | fun nextInt() = COUNT++ | 
 | fun next() = "${nextInt()}".padStart(3, '0') | 
 |  | 
 | fun main(args: Array<String>) { | 
 |     test() | 
 |     testInner() | 
 | } | 
 |  | 
 | private fun test() { | 
 |     test1(nextInt(), nextInt(), nextInt(), nextInt()) | 
 |     test2(next(), next(), next()) | 
 |     test3a(next(), next(), next()) | 
 |     test3a(next(), Local(next()), Local(Local(next()))) | 
 |     test3b(next(), next(), next()) | 
 |     test3b(next(), Local(next()), Local(next())) | 
 | } | 
 |  | 
 | private data class Local<out T>(val id: T) | 
 |  | 
 | private fun test1(c0: Int, c1: Int, c2: Int, c3: Int) { | 
 |     Lambdas.acceptIntConsumer({ println("{${next()}:$it}") }, nextInt()) | 
 |     Lambdas.acceptIntConsumer({ println("{${next()}:$it}") }, nextInt()) | 
 |  | 
 |     Lambdas.acceptStringConsumer({ println("${next()}:{$it}:{$c0}") }, next()) | 
 |     Lambdas.acceptStringConsumer({ println("${next()}:{$it}:{$c0}") }, next()) | 
 |  | 
 |     Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}") }, next()) | 
 |     Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}") }, next()) | 
 |  | 
 |     Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}:{$c2}") }, Local(next())) | 
 |     Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}:{$c2}") }, Local(next())) | 
 |  | 
 |     Lambdas.acceptGenericConsumer( | 
 |             { println("${next()}:{$it}:{$c0}:{$c1}:{$c2}:{$c3}") }, Local(Local(next()))) | 
 |     Lambdas.acceptGenericConsumer( | 
 |             { println("${next()}:{$it}:{$c0}:{$c1}:{$c2}:{$c3}") }, Local(Local(next()))) | 
 | } | 
 |  | 
 | private fun test2(c0: String, c1: String, c2: String) { | 
 |     println(Lambdas.acceptIntSupplier { nextInt() }) | 
 |     println(Lambdas.acceptIntSupplier { nextInt() }) | 
 |  | 
 |     println(Lambdas.acceptStringSupplier { "${next()}:$c0" }) | 
 |     println(Lambdas.acceptStringSupplier { "${next()}:$c0" }) | 
 |  | 
 |     println(Lambdas.acceptGenericSupplier { "${next()}:$c0" }) | 
 |     println(Lambdas.acceptGenericSupplier { "${next()}:$c0" }) | 
 |  | 
 |     println(Lambdas.acceptGenericSupplier { "${Local(next())}:$c0:$c1" }) | 
 |     println(Lambdas.acceptGenericSupplier { "${Local(next())}:$c0:$c1" }) | 
 |  | 
 |     println(Lambdas.acceptGenericSupplier { "${Local(Local(next()))}:$c0:$c1:$c2" }) | 
 |     println(Lambdas.acceptGenericSupplier { "${Local(Local(next()))}:$c0:$c1:$c2" }) | 
 | } | 
 |  | 
 | private fun <P1, P2, P3> test3a(a: P1, b: P2, c: P3) { | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, b, c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, c, a, b) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, b, c, a) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(a), b, c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(b), a, c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, Local(b), c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, Local(c), b) | 
 |     Lambdas.acceptMultiFunction( | 
 |             { x, y, z -> "$x:$y:$z" }, Local(Local(a)), Local(Local(b)), Local(Local(c))) | 
 |     Lambdas.acceptMultiFunction( | 
 |             { x, y, z -> "$x:$y:$z" }, Local(Local(c)), Local(Local(a)), Local(Local(b))) | 
 | } | 
 |  | 
 | private fun <P> test3b(a: P, b: P, c: P) { | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, b, c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, c, a, b) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, b, c, a) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(a), b, c) | 
 |     Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(b), a, c) | 
 | } | 
 |  |