diff --git a/compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt b/compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt new file mode 100644 index 00000000000..b26ebcee65d --- /dev/null +++ b/compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt @@ -0,0 +1,16 @@ +// WITH_RUNTIME + +val cs = "123" + +val i1 = 1 + +fun box(): String { + // NB partially const-folded in JVM BE + if (!(1 in cs.indices)) return "Fail 1 in CharSequence.indices" + if (1 !in cs.indices) return "Fail 1 !in CharSequence.indices" + + if (!(i1 in cs.indices)) return "Fail i1 in CharSequence.indices" + if (i1 !in cs.indices) return "Fail i1 !in CharSequence.indices" + + return "OK" +} diff --git a/compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt b/compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt new file mode 100644 index 00000000000..0ac755d5bcc --- /dev/null +++ b/compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt @@ -0,0 +1,16 @@ +// WITH_RUNTIME + +val xs = listOf(1, 2, 3) + +val i1 = 1 + +fun box(): String { + // NB partially const-folded in JVM BE + if (!(1 in xs.indices)) return "Fail 1 in Collection.indices" + if (1 !in xs.indices) return "Fail 1 !in Collection.indices" + + if (!(i1 in xs.indices)) return "Fail i1 in Collection.indices" + if (i1 !in xs.indices) return "Fail i1 !in Collection.indices" + + return "OK" +} diff --git a/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt b/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt new file mode 100644 index 00000000000..e129b4c315c --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt @@ -0,0 +1,8 @@ +// WITH_RUNTIME + +fun testCharSequence(i: Int, cs: CharSequence) = i in cs.indices + +// 0 INVOKESTATIC kotlin/text/StringsKt.getIndices +// 0 INVOKEVIRTUAL kotlin/ranges/IntRange.contains +// 1 INVOKEINTERFACE java/lang/CharSequence.length + diff --git a/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt b/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt new file mode 100644 index 00000000000..24dd9fa2b2f --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME + +fun testCollection(i: Int, xs: List) = i in xs.indices + +// 0 INVOKESTATIC kotlin/collections/CollectionsKt.getIndices +// 0 INVOKEVIRTUAL kotlin/ranges/IntRange.contains +// 1 INVOKEINTERFACE java/util/Collection.size diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 7a1ef6e502d..09613afaeed 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -13195,6 +13195,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("inCharSequenceIndices.kt") + public void testInCharSequenceIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt"); + doTest(fileName); + } + + @TestMetadata("inCollectionIndices.kt") + public void testInCollectionIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt"); + doTest(fileName); + } + @TestMetadata("inComparableRange.kt") public void testInComparableRange() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inComparableRange.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index b6dbac4781f..cb67ff999ad 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -13195,6 +13195,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("inCharSequenceIndices.kt") + public void testInCharSequenceIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt"); + doTest(fileName); + } + + @TestMetadata("inCollectionIndices.kt") + public void testInCollectionIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt"); + doTest(fileName); + } + @TestMetadata("inComparableRange.kt") public void testInComparableRange() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inComparableRange.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 47edebbed0a..f8d59044bea 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1865,6 +1865,18 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("inCharSequenceIndices.kt") + public void testInCharSequenceIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/ranges/inCharSequenceIndices.kt"); + doTest(fileName); + } + + @TestMetadata("inCollectionIndices.kt") + public void testInCollectionIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/ranges/inCollectionIndices.kt"); + doTest(fileName); + } + @TestMetadata("inComparableRangeLiteral.kt") public void testInComparableRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/ranges/inComparableRangeLiteral.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index c828c14de7e..a7e537da218 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13195,6 +13195,18 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes doTest(fileName); } + @TestMetadata("inCharSequenceIndices.kt") + public void testInCharSequenceIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt"); + doTest(fileName); + } + + @TestMetadata("inCollectionIndices.kt") + public void testInCollectionIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt"); + doTest(fileName); + } + @TestMetadata("inComparableRange.kt") public void testInComparableRange() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inComparableRange.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index a8bd14b74dc..14aa8e24245 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -14803,6 +14803,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("inCharSequenceIndices.kt") + public void testInCharSequenceIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCharSequenceIndices.kt"); + doTest(fileName); + } + + @TestMetadata("inCollectionIndices.kt") + public void testInCollectionIndices() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inCollectionIndices.kt"); + doTest(fileName); + } + @TestMetadata("inComparableRange.kt") public void testInComparableRange() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/contains/inComparableRange.kt");