blob: 7fd2d0c79d6df18e96a4903143d4beedb62a6fdc [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_jstyle_trivial
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)
}