From a47ab0d4085282b6e4df7a598973b9bd2dd514cf Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 30 Aug 2012 20:30:03 +0400 Subject: [PATCH] More tests for continue in for loops --- .../controlStructures/continueInFor.kt | 48 ++++--- .../controlStructures/continueToLabelInFor.kt | 123 ++++++++++++++++++ .../jet/codegen/ControlStructuresTest.java | 5 + 3 files changed, 158 insertions(+), 18 deletions(-) create mode 100644 compiler/testData/codegen/controlStructures/continueToLabelInFor.kt diff --git a/compiler/testData/codegen/controlStructures/continueInFor.kt b/compiler/testData/codegen/controlStructures/continueInFor.kt index 3014174af6a..b4e1734aa74 100644 --- a/compiler/testData/codegen/controlStructures/continueInFor.kt +++ b/compiler/testData/codegen/controlStructures/continueInFor.kt @@ -1,7 +1,7 @@ fun for_int_range(): Int { var c = 0 - @loop for (i in 1..10) { - if (c >= 5) continue @loop + for (i in 1..10) { + if (c >= 5) continue c++ } return c @@ -11,8 +11,8 @@ fun for_byte_range(): Int { var c = 0 val from: Byte = 1 val to: Byte = 10 - @loop for (i in from..to) { - if (c >= 5) continue @loop + for (i in from..to) { + if (c >= 5) continue c++ } return c @@ -22,8 +22,8 @@ fun for_long_range(): Int { var c = 0 val from: Long = 1 val to: Long = 10 - @loop for (i in from..to) { - if (c >= 5) continue @loop + for (i in from..to) { + if (c >= 5) continue c++ } return c @@ -34,8 +34,8 @@ fun for_int_list(): Int { a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue c++ } return c @@ -46,8 +46,8 @@ fun for_byte_list(): Int { a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue c++ } return c @@ -58,8 +58,8 @@ fun for_long_list(): Int { a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue c++ } return c @@ -70,8 +70,20 @@ fun for_double_list(): Int { a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue + c++ + } + return c +} + +fun for_object_list(): Int { + val a = java.util.ArrayList() + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + var c = 0 + for (i in a) { + if (c >= 5) continue c++ } return c @@ -80,8 +92,8 @@ fun for_double_list(): Int { fun for_str_array(): Int { val a = Array(10) {i -> "$i"} var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue c++ } return c @@ -90,8 +102,8 @@ fun for_str_array(): Int { fun for_intarray(): Int { val a = IntArray(10) var c = 0 - @loop for (i in a) { - if (c >= 5) continue @loop + for (i in a) { + if (c >= 5) continue c++ } return c diff --git a/compiler/testData/codegen/controlStructures/continueToLabelInFor.kt b/compiler/testData/codegen/controlStructures/continueToLabelInFor.kt new file mode 100644 index 00000000000..b3b57f1d739 --- /dev/null +++ b/compiler/testData/codegen/controlStructures/continueToLabelInFor.kt @@ -0,0 +1,123 @@ +fun for_int_range(): Int { + var c = 0 + @loop for (i in 1..10) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_byte_range(): Int { + var c = 0 + val from: Byte = 1 + val to: Byte = 10 + @loop for (i in from..to) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_long_range(): Int { + var c = 0 + val from: Long = 1 + val to: Long = 10 + @loop for (i in from..to) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_int_list(): Int { + val a = java.util.ArrayList() + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_byte_list(): Int { + val a = java.util.ArrayList() + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_long_list(): Int { + val a = java.util.ArrayList() + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + a.add(0); a.add(0); a.add(0); a.add(0); a.add(0) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_double_list(): Int { + val a = java.util.ArrayList() + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_object_list(): Int { + val a = java.util.ArrayList() + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0); a.add(0.0) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_str_array(): Int { + val a = Array(10) {i -> "$i"} + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun for_intarray(): Int { + val a = IntArray(10) + var c = 0 + @loop for (i in a) { + if (c >= 5) continue @loop + c++ + } + return c +} + +fun box(): String { + if (for_int_range() != 5) return "fail 1" + if (for_byte_range() != 5) return "fail 2" + if (for_long_range() != 5) return "fail 3" + if (for_intarray() != 5) return "fail 4" + if (for_str_array() != 5) return "fail 5" + if (for_int_list() != 5) return "fail 6" + if (for_byte_list() != 5) return "fail 7" + if (for_long_list() != 5) return "fail 8" + if (for_double_list() != 5) return "fail 9" + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java index 2e1b54ffab7..eeb682af750 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java @@ -349,6 +349,11 @@ public class ControlStructuresTest extends CodegenTestCase { blackBoxFile("controlStructures/continueInFor.kt"); } + public void testContinueToLabelInFor() throws Exception { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_AND_ANNOTATIONS); + blackBoxFile("controlStructures/continueToLabelInFor.kt"); + } + public void testKt628() throws Exception { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); blackBoxFile("regressions/kt628.kt");