| /* |
| Modified test case from issue: https://youtrack.jetbrains.com/issue/KT-24542 |
| */ |
| // FILE: lib.kt |
| package foo |
| |
| class Test() { |
| var output: String = "" |
| |
| inline fun foo(): Boolean { |
| output += "foo " |
| return false |
| } |
| |
| fun run(doBreak: Boolean, doContinue: Boolean) { |
| do { |
| output += "1 " |
| if (doBreak) break |
| output += "2 " |
| if (doContinue) continue |
| output += "3 " |
| } |
| while(foo()) |
| } |
| |
| fun runNested(doBreak: Boolean, doContinue: Boolean) { |
| do { |
| output += "0_1 " |
| |
| do { |
| output += "1_1 " |
| if (doBreak) break |
| output += "1_2 " |
| if (doContinue) continue |
| output += "1_3 " |
| } |
| while(foo()) |
| |
| output += "0_2 " |
| |
| if (doBreak) break |
| |
| output += "0_3 " |
| |
| do { |
| output += "2_1 " |
| if (doBreak) break |
| output += "2_2 " |
| if (doContinue) continue |
| output += "2_3 " |
| } |
| while(foo()) |
| |
| output += "0_4 " |
| |
| if (doContinue) continue |
| |
| output += "0_5 " |
| |
| loop_with_label@ do { |
| output += "3_1 " |
| if (doBreak) break |
| output += "3_2 " |
| if (doContinue) continue |
| output += "3_3 " |
| } |
| while(foo()) |
| |
| output += "0_6 " |
| } |
| while(foo()) |
| } |
| } |
| |
| // FILE: main.kt |
| package foo |
| |
| fun test(doBreak: Boolean, doContinue: Boolean): String { |
| var x = Test() |
| x.run(doBreak, doContinue) |
| return x.output |
| } |
| |
| fun testNested(doBreak: Boolean, doContinue: Boolean): String { |
| var x = Test() |
| x.runNested(doBreak, doContinue) |
| return x.output |
| } |
| |
| fun box(): String { |
| val test1 = test(true, true) |
| val test2 = test(true, false) |
| val test3 = test(false, true) |
| val test4 = test(false, false) |
| |
| if (test1 != "1 ") return "Test1 output: ${test1}" |
| if (test2 != "1 ") return "Test2 output: ${test2}" |
| if (test3 != "1 2 foo ") return "Test3 output: ${test3}" |
| if (test4 != "1 2 3 foo ") return "Test4 output: ${test4}" |
| |
| val testNested1 = testNested(true, true) |
| val testNested2 = testNested(true, false) |
| val testNested3 = testNested(false, true) |
| val testNested4 = testNested(false, false) |
| |
| if (testNested1 != "0_1 1_1 0_2 ") return "testNested1 output: ${testNested1}" |
| if (testNested2 != "0_1 1_1 0_2 ") return "testNested2 output: ${testNested2}" |
| if (testNested3 != "0_1 1_1 1_2 foo 0_2 0_3 2_1 2_2 foo 0_4 foo ") return "testNested3 output: ${testNested3}" |
| if (testNested4 != "0_1 1_1 1_2 1_3 foo 0_2 0_3 2_1 2_2 2_3 foo 0_4 0_5 3_1 3_2 3_3 foo 0_6 foo ") |
| return "testNested4 output: ${testNested4}" |
| |
| return "OK" |
| } |