Align behavoir of collection constructors across platforms #KT-59192

The initialCapacity should be non-negative and loadFactor should be positive.

As a part of efforts to stabilize Native stdlib.
This commit is contained in:
Abduqodiri Qurbonzoda
2023-06-08 15:25:07 +03:00
committed by Space Team
parent 0bef1533e2
commit 830c78773c
9 changed files with 91 additions and 7 deletions
@@ -1261,4 +1261,47 @@ class CollectionTest {
fun ensureCapacity() {
ArrayList<String>().ensureCapacity(-1) // negative argument is ignored
}
@Test
fun constructorWithCapacity() {
assertFailsWith<IllegalArgumentException> {
ArrayList<String>(/*initialCapacity = */-1)
}
assertEquals(0, ArrayList<String>(/*initialCapacity = */0).size)
assertEquals(0, ArrayList<String>(/*initialCapacity = */10).size)
assertFailsWith<IllegalArgumentException> {
HashSet<String>(/*initialCapacity = */-1)
}
assertFailsWith<IllegalArgumentException> {
HashSet<String>(/*initialCapacity = */-1, /*loadFactor = */0.5f)
}
assertFailsWith<IllegalArgumentException> {
HashSet<String>(/*initialCapacity = */10, /*loadFactor = */0.0f)
}
assertFailsWith<IllegalArgumentException> {
HashSet<String>(/*initialCapacity = */10, /*loadFactor = */Float.NaN)
}
assertEquals(0, HashSet<String>(/*initialCapacity = */0).size)
assertEquals(0, HashSet<String>(/*initialCapacity = */10).size)
assertEquals(0, HashSet<String>(/*initialCapacity = */0, /*loadFactor = */0.5f).size)
assertEquals(0, HashSet<String>(/*initialCapacity = */10, /*loadFactor = */1.5f).size)
assertFailsWith<IllegalArgumentException> {
LinkedHashSet<String>(/*initialCapacity = */-1)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashSet<String>(/*initialCapacity = */-1, /*loadFactor = */0.5f)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashSet<String>(/*initialCapacity = */10, /*loadFactor = */0.0f)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashSet<String>(/*initialCapacity = */10, /*loadFactor = */Float.NaN)
}
assertEquals(0, LinkedHashSet<String>(/*initialCapacity = */0).size)
assertEquals(0, LinkedHashSet<String>(/*initialCapacity = */10).size)
assertEquals(0, LinkedHashSet<String>(/*initialCapacity = */0, /*loadFactor = */0.5f).size)
assertEquals(0, LinkedHashSet<String>(/*initialCapacity = */10, /*loadFactor = */1.5f).size)
}
}
@@ -766,4 +766,41 @@ class MapTest {
assertFailsWith<NoSuchElementException> { empty.minOfWith(naturalOrder()) { it.toString() } }
assertFailsWith<NoSuchElementException> { empty.maxOfWith(naturalOrder()) { it.toString() } }
}
@Test
fun constructorWithCapacity() {
assertFailsWith<IllegalArgumentException> {
HashMap<String, String>(/*initialCapacity = */-1)
}
assertFailsWith<IllegalArgumentException> {
HashMap<String, String>(/*initialCapacity = */-1, /*loadFactor = */0.5f)
}
assertFailsWith<IllegalArgumentException> {
HashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */0.0f)
}
assertFailsWith<IllegalArgumentException> {
HashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */Float.NaN)
}
assertEquals(0, HashMap<String, String>(/*initialCapacity = */0).size)
assertEquals(0, HashMap<String, String>(/*initialCapacity = */10).size)
assertEquals(0, HashMap<String, String>(/*initialCapacity = */0, /*loadFactor = */0.5f).size)
assertEquals(0, HashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */1.5f).size)
assertFailsWith<IllegalArgumentException> {
LinkedHashMap<String, String>(/*initialCapacity = */-1)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashMap<String, String>(/*initialCapacity = */-1, /*loadFactor = */0.5f)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */0.0f)
}
assertFailsWith<IllegalArgumentException> {
LinkedHashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */Float.NaN)
}
assertEquals(0, LinkedHashMap<String, String>(/*initialCapacity = */0).size)
assertEquals(0, LinkedHashMap<String, String>(/*initialCapacity = */10).size)
assertEquals(0, LinkedHashMap<String, String>(/*initialCapacity = */0, /*loadFactor = */0.5f).size)
assertEquals(0, LinkedHashMap<String, String>(/*initialCapacity = */10, /*loadFactor = */1.5f).size)
}
}