Native: add more tests for Swift Set and Dictionary used in Kotlin
This commit is contained in:
committed by
Space
parent
39c73e25a4
commit
38f2b20e1a
@@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
package stdlib
|
package stdlib
|
||||||
|
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
fun <K, V> isEmpty(map: Map<K, V>) = map.isEmpty()
|
fun <K, V> isEmpty(map: Map<K, V>) = map.isEmpty()
|
||||||
|
|
||||||
fun <K, V> getKeysAsSet(map: Map<K, V>) = map.keys
|
fun <K, V> getKeysAsSet(map: Map<K, V>) = map.keys
|
||||||
@@ -61,4 +63,67 @@ data class TripleVars<T>(var first: T, var second: T, var third: T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun gc() = kotlin.native.internal.GC.collect()
|
fun gc() = kotlin.native.internal.GC.collect()
|
||||||
|
|
||||||
|
// Note: this method checks only some of the operations (namely the ones modified recently,
|
||||||
|
// and thus required additional tests).
|
||||||
|
// More tests are absolutely needed.
|
||||||
|
@Throws(Throwable::class)
|
||||||
|
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||||
|
fun testSet(set: Set<String>) {
|
||||||
|
set as kotlin.native.internal.KonanSet<String> // Smart cast to access getElement below.
|
||||||
|
val setAny: Set<Any?> = set
|
||||||
|
|
||||||
|
assertTrue(set.contains("a"))
|
||||||
|
assertTrue(set.contains("c"))
|
||||||
|
assertFalse(set.contains("h"))
|
||||||
|
assertFalse(setAny.contains(1))
|
||||||
|
|
||||||
|
|
||||||
|
assertEquals("a", set.getElement("a"))
|
||||||
|
assertNull(set.getElement("aa"))
|
||||||
|
assertNull((setAny as kotlin.native.internal.KonanSet<Any?>).getElement(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: this method checks only some of the operations (namely the ones modified recently,
|
||||||
|
// and thus required additional tests).
|
||||||
|
// More tests are absolutely needed.
|
||||||
|
@Throws(Throwable::class)
|
||||||
|
fun testMap(map: Map<String, Int>) {
|
||||||
|
val mapAny: Map<String, Any?> = map
|
||||||
|
val mapKeysAny: Set<Any?> = map.keys
|
||||||
|
val mapEntriesAny: Set<Map.Entry<Any?, Any?>> = map.entries
|
||||||
|
|
||||||
|
assertTrue(map.containsKey("a"))
|
||||||
|
assertTrue(map.keys.contains("b"))
|
||||||
|
assertTrue(map.containsKey("g"))
|
||||||
|
assertFalse(map.containsKey("0"))
|
||||||
|
assertFalse(mapKeysAny.contains(1))
|
||||||
|
|
||||||
|
assertTrue(map.containsValue(1))
|
||||||
|
assertTrue(map.values.contains(2))
|
||||||
|
assertTrue(map.containsValue(7))
|
||||||
|
assertFalse(map.containsValue(8))
|
||||||
|
assertFalse(mapAny.containsValue("8"))
|
||||||
|
|
||||||
|
assertEquals(2, map.get("b"))
|
||||||
|
assertEquals(4, map.get("d"))
|
||||||
|
assertNull(map.get("h"))
|
||||||
|
|
||||||
|
val referenceMap = (0 until 7).map { ('a' + it).toString() to (it + 1) }.toMap()
|
||||||
|
assertEquals(referenceMap.hashCode(), map.hashCode())
|
||||||
|
assertEquals(referenceMap, map)
|
||||||
|
assertEquals(map, referenceMap)
|
||||||
|
|
||||||
|
assertEquals(28, map.entries.sumBy { it.value })
|
||||||
|
|
||||||
|
assertTrue(map.entries.contains(createMapEntry("e", 5)))
|
||||||
|
assertTrue(map.entries.contains(createMapEntry("g", 7)))
|
||||||
|
assertFalse(map.entries.contains(createMapEntry("e", 7)))
|
||||||
|
assertFalse(map.entries.contains(createMapEntry("e", 10)))
|
||||||
|
assertFalse(map.entries.contains(createMapEntry("10", 5)))
|
||||||
|
assertFalse(map.entries.contains(createMapEntry("10", 10)))
|
||||||
|
assertFalse(mapEntriesAny.contains(createMapEntry(5, "e")))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun <K, V> createMapEntry(key: K, value: V) = mapOf(key to value).entries.single()
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ class StdlibTests : TestProvider {
|
|||||||
TestCase(name: "TestMutableMap", method: withAutorelease(testMutableMap)),
|
TestCase(name: "TestMutableMap", method: withAutorelease(testMutableMap)),
|
||||||
TestCase(name: "TestKotlinMutableSetInit", method: withAutorelease(testKotlinMutableSetInit)),
|
TestCase(name: "TestKotlinMutableSetInit", method: withAutorelease(testKotlinMutableSetInit)),
|
||||||
TestCase(name: "TestKotlinMutableDictionaryInit", method: withAutorelease(testKotlinMutableDictionaryInit)),
|
TestCase(name: "TestKotlinMutableDictionaryInit", method: withAutorelease(testKotlinMutableDictionaryInit)),
|
||||||
|
TestCase(name: "TestSwiftSetInKotlin", method: withAutorelease(testSwiftSetInKotlin)),
|
||||||
|
TestCase(name: "TestSwiftDictionaryInKotlin", method: withAutorelease(testSwiftDictionaryInKotlin)),
|
||||||
]
|
]
|
||||||
providers.append(self)
|
providers.append(self)
|
||||||
}
|
}
|
||||||
@@ -459,4 +461,12 @@ class StdlibTests : TestProvider {
|
|||||||
StdlibKt.gc() // To reproduce https://github.com/JetBrains/kotlin-native/issues/3259
|
StdlibKt.gc() // To reproduce https://github.com/JetBrains/kotlin-native/issues/3259
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testSwiftSetInKotlin() throws {
|
||||||
|
try StdlibKt.testSet(set: ["a", "b", "c", "d", "e", "f", "g"])
|
||||||
|
}
|
||||||
|
|
||||||
|
func testSwiftDictionaryInKotlin() throws {
|
||||||
|
try StdlibKt.testMap(map: ["a" : 1, "b" : 2, "c" : 3, "d" : 4, "e" : 5, "f" : 6, "g" : 7])
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user