Fix unordered set/map behavior expectations
diff --git a/libraries/stdlib/test/collections/AbstractCollectionsTest.kt b/libraries/stdlib/test/collections/AbstractCollectionsTest.kt
index d0e0e02..cda1ab2 100644
--- a/libraries/stdlib/test/collections/AbstractCollectionsTest.kt
+++ b/libraries/stdlib/test/collections/AbstractCollectionsTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -48,7 +48,7 @@
assertTrue("ok" in set)
compare(set.toSet(), set) {
- setBehavior()
+ setBehavior(ordered = true)
}
}
@@ -72,7 +72,7 @@
assertEquals(listOf(42), map.values.toList())
compare(map.toMap(), map) {
- mapBehavior()
+ mapBehavior(ordered = true)
}
}
@@ -142,7 +142,7 @@
assertEquals(setOf("element", "test"), set)
compare(set.storage, set) {
- setBehavior()
+ setBehavior(ordered = true)
}
}
@@ -161,7 +161,7 @@
assertTrue(map.containsValue('f'.toInt()))
compare(map.storage, map) {
- mapBehavior()
+ mapBehavior(ordered = true)
}
}
}
\ No newline at end of file
diff --git a/libraries/stdlib/test/collections/CollectionBehaviors.kt b/libraries/stdlib/test/collections/CollectionBehaviors.kt
index 087a011..3d7839a 100644
--- a/libraries/stdlib/test/collections/CollectionBehaviors.kt
+++ b/libraries/stdlib/test/collections/CollectionBehaviors.kt
@@ -1,14 +1,15 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package test.collections.behaviors
import test.collections.CompareContext
+import kotlin.test.assertEquals
public fun <T> CompareContext<List<T>>.listBehavior() {
- equalityBehavior()
+ equalityBehavior(withToString = true)
collectionBehavior()
compareProperty({ listIterator() }, { listIteratorBehavior() })
compareProperty({ listIterator(0) }, { listIteratorBehavior() })
@@ -62,14 +63,27 @@
propertyFails { next() }
}
-public fun <T> CompareContext<Set<T>>.setBehavior(objectName: String = "") {
- equalityBehavior(objectName)
- collectionBehavior(objectName)
- compareProperty({ iterator() }, { iteratorBehavior() })
+public fun <T> CompareContext<Iterator<T>>.unorderedIteratorBehavior() {
+ propertyEquals { hasNext() }
+ val expectedValues = mutableListOf<T>()
+ val actualValues = mutableListOf<T>()
+ while (expected.hasNext()) {
+ expectedValues.add(expected.next())
+ actualValues.add(actual.next())
+ propertyEquals { hasNext() }
+ }
+ propertyFails { next() }
+ assertEquals(expectedValues.groupingBy { it }.eachCount(), actualValues.groupingBy { it }.eachCount())
}
-public fun <K, V> CompareContext<Map<K, V>>.mapBehavior() {
- equalityBehavior()
+public fun <T> CompareContext<Set<T>>.setBehavior(objectName: String = "", ordered: Boolean = false) {
+ equalityBehavior(objectName, withToString = ordered)
+ collectionBehavior(objectName)
+ compareProperty({ iterator() }, { if (ordered) iteratorBehavior() else unorderedIteratorBehavior() })
+}
+
+public fun <K, V> CompareContext<Map<K, V>>.mapBehavior(ordered: Boolean = false) {
+ equalityBehavior(withToString = ordered)
propertyEquals { size }
propertyEquals { isEmpty() }
@@ -82,16 +96,18 @@
propertyEquals { containsValue(values.firstOrNull()) }
propertyEquals { get(null as Any?) }
- compareProperty({ keys }, { setBehavior("keySet") })
- compareProperty({ entries }, { setBehavior("entrySet") })
+ compareProperty({ keys }, { setBehavior("keySet", ordered) })
+ compareProperty({ entries }, { setBehavior("entrySet", ordered) })
compareProperty({ values }, { collectionBehavior("values") })
}
-public fun <T> CompareContext<T>.equalityBehavior(objectName: String = "") {
+public fun <T> CompareContext<T>.equalityBehavior(objectName: String = "", withToString: Boolean = true) {
val prefix = objectName + if (objectName.isNotEmpty()) "." else ""
equals(objectName)
propertyEquals(prefix + "hashCode") { hashCode() }
- propertyEquals(prefix + "toString") { toString() }
+ if (withToString) {
+ propertyEquals(prefix + "toString") { toString() }
+ }
}
diff --git a/libraries/stdlib/test/collections/CollectionTest.kt b/libraries/stdlib/test/collections/CollectionTest.kt
index 74cf9ff..e840f26 100644
--- a/libraries/stdlib/test/collections/CollectionTest.kt
+++ b/libraries/stdlib/test/collections/CollectionTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -1076,15 +1076,15 @@
}
@Test fun specialSets() {
- compare(linkedSetOf<Int>(), setOf<Int>()) { setBehavior() }
- compare(hashSetOf<Double>(), emptySet<Double>()) { setBehavior() }
- compare(listOf("value").toMutableSet(), setOf("value")) { setBehavior() }
+ compare(linkedSetOf<Int>(), setOf<Int>()) { setBehavior(ordered = true) }
+ compare(hashSetOf<Double>(), emptySet<Double>()) { setBehavior(ordered = true) }
+ compare(listOf("value").toMutableSet(), setOf("value")) { setBehavior(ordered = true) }
}
@Test fun specialMaps() {
- compare(hashMapOf<String, Int>(), mapOf<String, Int>()) { mapBehavior() }
- compare(linkedMapOf<Int, String>(), emptyMap<Int, String>()) { mapBehavior() }
- compare(linkedMapOf(2 to 3), mapOf(2 to 3)) { mapBehavior() }
+ compare(hashMapOf<String, Int>(), mapOf<String, Int>()) { mapBehavior(ordered = true) }
+ compare(linkedMapOf<Int, String>(), emptyMap<Int, String>()) { mapBehavior(ordered = true) }
+ compare(linkedMapOf(2 to 3), mapOf(2 to 3)) { mapBehavior(ordered = true) }
}
@Test fun toStringTest() {
diff --git a/libraries/stdlib/test/js/MapJsTest.kt b/libraries/stdlib/test/js/MapJsTest.kt
index 609d051..695d6ce 100644
--- a/libraries/stdlib/test/js/MapJsTest.kt
+++ b/libraries/stdlib/test/js/MapJsTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -52,11 +52,11 @@
@Test fun compareBehavior() {
val specialJsStringMap = stringMapOf<Any>()
specialJsStringMap.put("k1", "v1")
- compare(genericHashMapOf("k1" to "v1"), specialJsStringMap) { mapBehavior() }
+ compare(genericHashMapOf("k1" to "v1"), specialJsStringMap) { mapBehavior(ordered = false) }
val specialJsNumberMap = HashMap<Int, Any>(4)
specialJsNumberMap.put(5, "v5")
- compare(genericHashMapOf(5 to "v5"), specialJsNumberMap) { mapBehavior() }
+ compare(genericHashMapOf(5 to "v5"), specialJsNumberMap) { mapBehavior(ordered = false) }
}
@Test fun putNull() {
diff --git a/libraries/stdlib/test/js/SetJsTest.kt b/libraries/stdlib/test/js/SetJsTest.kt
index a03f2ef..8774a21 100644
--- a/libraries/stdlib/test/js/SetJsTest.kt
+++ b/libraries/stdlib/test/js/SetJsTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -53,11 +53,11 @@
fun compareBehavior() {
val specialJsStringSet = HashSet<String>()
specialJsStringSet.add("kotlin")
- compare(genericHashSetOf("kotlin"), specialJsStringSet) { setBehavior() }
+ compare(genericHashSetOf("kotlin"), specialJsStringSet) { setBehavior(ordered = false) }
val specialJsNumberSet = HashSet<Double>()
specialJsNumberSet.add(3.14)
- compare(genericHashSetOf(3.14), specialJsNumberSet) { setBehavior() }
+ compare(genericHashSetOf(3.14), specialJsNumberSet) { setBehavior(ordered = false) }
}
}
diff --git a/libraries/stdlib/test/text/StringTest.kt b/libraries/stdlib/test/text/StringTest.kt
index 4afbaf1..f3e945b 100644
--- a/libraries/stdlib/test/text/StringTest.kt
+++ b/libraries/stdlib/test/text/StringTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -1655,7 +1655,7 @@
@Test
fun toHashSet() {
- compare(hashSetOf('A', 'B', 'C'), "ACAABBAC".toHashSet()) { setBehavior() }
+ compare(hashSetOf('A', 'B', 'C'), "ACAABBAC".toHashSet()) { setBehavior(ordered = false) }
buildString {
repeat(100) { append('1') }
@@ -1664,7 +1664,7 @@
append('4')
repeat(100) { append('5') }
}.let {
- compare(hashSetOf('1', '2', '3', '4', '5'), it.toHashSet()) { setBehavior() }
+ compare(hashSetOf('1', '2', '3', '4', '5'), it.toHashSet()) { setBehavior(ordered = false) }
}
}
}