// TARGET_BACKEND: JVM // WITH_STDLIB // FULL_JDK package collections import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue import java.security.KeyPair fun testCollectionSize(c: Collection) = assertEquals(0, c.size) fun testCollectionIsEmpty(c: Collection) = assertTrue(c.isEmpty()) fun testCollectionContains(c: Collection) = assertTrue(c.contains(1 as Any?)) fun testCollectionIterator(c: Collection) { val it = c.iterator() while (it.hasNext()) { assertEquals(1, it.next() as Any?) } } fun testCollectionContainsAll(c: Collection) = assertTrue(c.containsAll(c)) fun testMutableCollectionAdd(c: MutableCollection, t: T) { c.add(t) assertEquals(1, c.size) assertTrue(c.contains(t)) } fun testMutableCollectionRemove(c: MutableCollection, t: T) { c.remove(t) assertEquals(0, c.size) assertFalse(c.contains(t)) } fun testMutableCollectionIterator(c: MutableCollection, t: T) { c.add(t) val it = c.iterator() while (it.hasNext()) { it.next() it.remove() } assertEquals(0, c.size) } fun testMutableCollectionAddAll(c: MutableCollection, t1: T, t2: T) { c.addAll(arrayListOf(t1, t2)) assertEquals(arrayListOf(t1, t2), c) } fun testMutableCollectionRemoveAll(c: MutableCollection, t1: T, t2: T) { c.addAll(arrayListOf(t1, t2)) c.removeAll(arrayListOf(t1)) assertEquals(arrayListOf(t2), c) } fun testMutableCollectionRetainAll(c: MutableCollection, t1: T, t2: T) { c.addAll(arrayListOf(t1, t2)) c.retainAll(arrayListOf(t1)) assertEquals(arrayListOf(t1), c) } fun testMutableCollectionClear(c: MutableCollection) { c.clear() assertTrue(c.isEmpty()) } fun testCollection() { testCollectionSize(arrayListOf()) testCollectionIsEmpty(arrayListOf()) testCollectionContains(arrayListOf(1)) testCollectionIterator(arrayListOf(1)) testCollectionContainsAll(arrayListOf("a", "b")) testMutableCollectionAdd(arrayListOf(), "") testMutableCollectionRemove(arrayListOf("a"), "a") testMutableCollectionIterator(arrayListOf(), 1) testMutableCollectionAddAll(arrayListOf(), 1, 2) testMutableCollectionRemoveAll(arrayListOf(), 1, 2) testMutableCollectionRetainAll(arrayListOf(), 1, 2) testMutableCollectionClear(arrayListOf(1, 2)) } fun testListGet(l: List, t: T) = assertEquals(t, l.get(0)) fun testListIndexOf(l: List, t: T) = assertEquals(0, l.indexOf(t)) fun testListIterator(l: List, t1 : T, t2 : T) { val indexes = arrayListOf() val result = arrayListOf() val it = l.listIterator() while (it.hasNext()) { indexes.add(it.nextIndex()) result.add(it.next()) } while (it.hasPrevious()) { indexes.add(it.previousIndex()) result.add(it.previous()) } assertEquals(arrayListOf(0, 1, 1, 0), indexes) assertEquals(arrayListOf(t1, t2, t2, t1), result) } fun testListSublist(l: List, t: T) = assertEquals(arrayListOf(t), l.subList(0, 1)) fun testMutableListSet(l: MutableList, t: T) { l.set(0, t) assertEquals(arrayListOf(t), l) } fun testMutableListIterator(l: MutableList, t1: T, t2: T, t3: T) { val it = l.listIterator() while (it.hasNext()) { it.next() it.add(t3) } assertEquals(arrayListOf(t1, t3, t2, t3), l) } fun testList() { testListGet(arrayListOf(1), 1) testListIndexOf(arrayListOf(1), 1) testListIterator(arrayListOf("a", "b"), "a", "b") testListSublist(arrayListOf(1, 2), 1) testMutableListSet(arrayListOf(2), 4) testMutableListIterator(arrayListOf(1, 2), 1, 2, 3) } fun testMapContainsKey(map: Map, k: K) = assertTrue(map.containsKey(k)) fun testMapKeys(map: Map, k1: K, k2: K) = assertEqualCollections(hashSetOf(k1, k2), map.keys) fun testMapValues(map: Map, v1: V, v2: V) = assertEqualCollections(hashSetOf(v1, v2), map.values) fun testMapEntrySet(map: Map, k : K, v: V) { for (entry in map.entries) { assertEquals(k, entry.key) assertEquals(v, entry.value) } } fun testMutableMapEntry(map: MutableMap, k1 : K, v: V) { for (entry in map.entries) { entry.setValue(v) } assertEquals(hashMapOf(k1 to v), map) } fun testMap() { testMapContainsKey(hashMapOf(1 to 'a', 2 to 'b'), 2) testMapKeys(hashMapOf(1 to 'a', 2 to 'b'), 1, 2) testMapValues(hashMapOf(1 to 'a', 2 to 'b'), 'a', 'b') testMapEntrySet(hashMapOf(1 to 'a'), 1, 'a') testMutableMapEntry(hashMapOf(1 to 'a'), 1, 'b') } fun box() : String { testCollection() testList() testMap() return "OK" } fun assertEqualCollections(c1: Collection, c2: Collection) = assertEquals(c1.toCollection(hashSetOf()), c2.toCollection(hashSetOf()))