| // FILE: lib.kt | |
| package foo | |
| import kotlin.test.* | |
| // CHECK_CONTAINS_NO_CALLS: testIf1 | |
| // CHECK_CONTAINS_NO_CALLS: testIf2 | |
| // CHECK_CONTAINS_NO_CALLS: testIf3 | |
| inline fun if1(f: (Int) -> Int, a: Int, b: Int, c: Int): Int { | |
| val result = f(a) | |
| if (result == b) { | |
| return f(a) | |
| } | |
| return f(c) | |
| } | |
| inline fun if2(f: (Int) -> Int, a: Int, b: Int, c: Int): Int { | |
| if (f(a) == b) { | |
| return f(a) | |
| } | |
| return f(c) | |
| } | |
| inline fun if3(f: (Int) -> Int, a: Int, b: Int, c: Int): Int { | |
| if (f(a) == b) { | |
| return f(a) | |
| } else { | |
| return f(c) | |
| } | |
| } | |
| // FILE: main.kt | |
| package foo | |
| import kotlin.test.* | |
| // CHECK_CONTAINS_NO_CALLS: testIf1 | |
| // CHECK_CONTAINS_NO_CALLS: testIf2 | |
| // CHECK_CONTAINS_NO_CALLS: testIf3 | |
| // CHECK_BREAKS_COUNT: function=testIf1 count=2 | |
| // CHECK_LABELS_COUNT: function=testIf1 name=$l$block count=1 | |
| // CHECK_LABELS_COUNT: function=testIf1 name=$l$block_0 count=1 | |
| fun testIf1(): String { | |
| val test1 = if1({it}, 1, 2, 3) | |
| if (test1 != 3) return "testIf1: test1 fail" | |
| val test2 = if1({it}, 2, 2, 3) | |
| if (test2 != 2) return "testIf1: test 2 fail" | |
| return "OK" | |
| } | |
| // CHECK_BREAKS_COUNT: function=testIf2 count=2 | |
| // CHECK_LABELS_COUNT: function=testIf2 name=$l$block count=1 | |
| // CHECK_LABELS_COUNT: function=testIf2 name=$l$block_0 count=1 | |
| fun testIf2(): String { | |
| val test1 = if2({it}, 1, 2, 3) | |
| if (test1 != 3) return "testIf2: test1 fail" | |
| val test2 = if2({it}, 2, 2, 3) | |
| if (test2 != 2) return "testIf2: test 2 fail" | |
| return "OK" | |
| } | |
| // CHECK_BREAKS_COUNT: function=testIf3 count=4 | |
| // CHECK_LABELS_COUNT: function=testIf3 name=$l$block_0 count=1 | |
| // CHECK_LABELS_COUNT: function=testIf3 name=$l$block_2 count=1 | |
| fun testIf3(): String { | |
| val test1 = if3({it}, 1, 2, 3) | |
| if (test1 != 3) return "testIf3: test1 fail" | |
| val test2 = if3({it}, 2, 2, 3) | |
| if (test2 != 2) return "testIf3: test 2 fail" | |
| return "OK" | |
| } | |
| fun box(): String { | |
| assertEquals("OK", testIf1()) | |
| assertEquals("OK", testIf2()) | |
| assertEquals("OK", testIf3()) | |
| return "OK" | |
| } |