Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 1 | // 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 Hertz | 608564a | 2018-03-19 16:01:37 +0100 | [diff] [blame] | 5 | package lambdas_singleton |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 6 | |
| 7 | private var COUNT = 0 |
| 8 | |
| 9 | fun nextInt() = COUNT++ |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 10 | |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 11 | fun next() = "${nextInt()}".padStart(3, '0') |
| 12 | |
| 13 | fun main(args: Array<String>) { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 14 | test() |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 15 | } |
| 16 | |
| 17 | private fun test() { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 18 | test2(listOf(next(), next(), next(), next(), next(), next(), next(), next(), next(), next())) |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 19 | } |
| 20 | |
| 21 | private fun Collection<String>.flatten() = |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 22 | this.joinToString(prefix = "(*", postfix = "*)", separator = "*") |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 23 | |
| 24 | private fun Array<String>.flatten() = |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 25 | this.joinToString(prefix = "(*", postfix = "*)", separator = "*") |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 26 | |
| 27 | private fun test2(args: Collection<String>) { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 28 | 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 Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 33 | } |
| 34 | |
| 35 | private inline fun process(crossinline f: (String) -> Unit) { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 36 | feed2 { f(it.flatten()) } |
| 37 | feed3 { f(it.flatten()) } |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 38 | } |
| 39 | |
| 40 | private fun feed3(f: (Array<String>) -> Unit) { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 41 | f(arrayOf(next(), next(), next())) |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 42 | } |
| 43 | |
| 44 | private fun feed2(f: (Array<String>) -> Unit) { |
Søren Gjesse | b5ae53d | 2025-02-19 09:31:52 +0100 | [diff] [blame] | 45 | f(arrayOf(next(), next())) |
Denis Vnukov | c22da84 | 2018-03-14 12:57:20 -0700 | [diff] [blame] | 46 | } |