diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 9141d72f6d6..addbd6ba2c2 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -890,6 +890,11 @@ task bridges_linkTest(type: LinkKonanTest) { lib = "codegen/bridges/linkTest_lib.kt" } +task bridges_special(type: RunKonanTest) { + goldValue = "Ok\n" + source = "codegen/bridges/special.kt" +} + task classDelegation_method(type: RunKonanTest) { goldValue = "OKOK\n" source = "codegen/classDelegation/method.kt" diff --git a/backend.native/tests/codegen/bridges/special.kt b/backend.native/tests/codegen/bridges/special.kt new file mode 100644 index 00000000000..d734a525e97 --- /dev/null +++ b/backend.native/tests/codegen/bridges/special.kt @@ -0,0 +1,41 @@ +package codegen.bridges.special + +import kotlin.test.* + +private object NotEmptyMap : MutableMap { + override fun containsKey(key: Any): Boolean = true + override fun containsValue(value: Int): Boolean = true + + // non-special bridges get(Object)Integer -> get(Object)I + override fun get(key: Any): Int = 1 + override fun remove(key: Any): Int = 1 + + override val size: Int get() = 0 + override fun isEmpty(): Boolean = true + override fun put(key: Any, value: Int): Int? = throw UnsupportedOperationException() + override fun putAll(from: Map): Unit = throw UnsupportedOperationException() + override fun clear(): Unit = throw UnsupportedOperationException() + override val entries: MutableSet> get() = null!! + override val keys: MutableSet get() = null!! + override val values: MutableCollection get() = null!! +} + +fun box(): String { + val n = NotEmptyMap as MutableMap + + if (n.get(null) != null) return "fail 1" + if (n.containsKey(null)) return "fail 2" + if (n.containsValue(null)) return "fail 3" + if (n.remove(null) != null) return "fail 4" + + if (n.get(1) == null) return "fail 5" + if (!n.containsKey("")) return "fail 6" + if (!n.containsValue(3)) return "fail 7" + if (n.remove("") == null) return "fail 8" + + return "Ok" +} + +@Test fun runTest() { + println(box()) +} \ No newline at end of file