| // FILE: lib.kt |
| import kotlin.test.* |
| |
| inline fun <T> buzz(x: T): T { |
| log("buzz($x)") |
| return x |
| } |
| |
| // CHECK_NOT_CALLED: buzz |
| |
| private var LOG = "" |
| |
| fun log(string: String) { |
| LOG += "$string;" |
| } |
| |
| fun pullLog(): String { |
| val string = LOG |
| LOG = "" |
| return string |
| } |
| |
| inline fun bar(predicate: (Char) -> Boolean): Int { |
| var i = -1 |
| val str = "abc " |
| do { |
| i++ |
| if (i == 1) continue |
| log(i.toString()) |
| } while (predicate(str[i]) && i < 3) |
| return i |
| } |
| |
| // FILE: main.kt |
| import kotlin.test.* |
| |
| // CHECK_NOT_CALLED: buzz |
| |
| fun <T> fizz(x: T): T { |
| log("fizz($x)") |
| return x |
| } |
| |
| private fun test(c: Char): Int { |
| return bar { |
| log(it.toString()) |
| it != c |
| } |
| } |
| |
| fun box(): String { |
| assertEquals(0, test('a')) |
| assertEquals("0;a;", pullLog()) |
| |
| assertEquals(1, test('b')) |
| assertEquals("0;a;b;", pullLog()) |
| |
| assertEquals(2, test('c')) |
| assertEquals("0;a;b;2;c;", pullLog()) |
| |
| assertEquals(3, test('*')) |
| assertEquals("0;a;b;2;c;3; ;", pullLog()) |
| |
| return "OK" |
| } |