blob: f2ae1f354e03f3b4a04af17882d1b52d4c11ae4a [file] [log] [blame]
Denis Vnukovc22da842018-03-14 12:57:20 -07001// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
Sebastien Hertz608564a2018-03-19 16:01:37 +01005package lambdas_singleton
Denis Vnukovc22da842018-03-14 12:57:20 -07006
7private var COUNT = 0
8
9fun nextInt() = COUNT++
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010010
Denis Vnukovc22da842018-03-14 12:57:20 -070011fun next() = "${nextInt()}".padStart(3, '0')
12
13fun main(args: Array<String>) {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010014 test()
Denis Vnukovc22da842018-03-14 12:57:20 -070015}
16
17private fun test() {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010018 test2(listOf(next(), next(), next(), next(), next(), next(), next(), next(), next(), next()))
Denis Vnukovc22da842018-03-14 12:57:20 -070019}
20
21private fun Collection<String>.flatten() =
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010022 this.joinToString(prefix = "(*", postfix = "*)", separator = "*")
Denis Vnukovc22da842018-03-14 12:57:20 -070023
24private fun Array<String>.flatten() =
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010025 this.joinToString(prefix = "(*", postfix = "*)", separator = "*")
Denis Vnukovc22da842018-03-14 12:57:20 -070026
27private fun test2(args: Collection<String>) {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010028 println(args.sortedByDescending { it.length }.flatten())
29 println(args.sortedByDescending { -it.length }.flatten())
30 process(::println)
31 process(::println)
32 val lambda: (Array<String>) -> Unit = {}
Denis Vnukovc22da842018-03-14 12:57:20 -070033}
34
35private inline fun process(crossinline f: (String) -> Unit) {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010036 feed2 { f(it.flatten()) }
37 feed3 { f(it.flatten()) }
Denis Vnukovc22da842018-03-14 12:57:20 -070038}
39
40private fun feed3(f: (Array<String>) -> Unit) {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010041 f(arrayOf(next(), next(), next()))
Denis Vnukovc22da842018-03-14 12:57:20 -070042}
43
44private fun feed2(f: (Array<String>) -> Unit) {
Søren Gjesseb5ae53d2025-02-19 09:31:52 +010045 f(arrayOf(next(), next()))
Denis Vnukovc22da842018-03-14 12:57:20 -070046}