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)) fun testCollectionIterator(c: Collection) { val it = c.iterator() while (it.hasNext()) { assertEquals(1, it.next()) } } fun testCollectionToArray(c: Collection) = assertEquals(1, c.toArray()[0]) 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(arrayList(t1, t2)) assertEquals(arrayList(t1, t2), c) } fun testMutableCollectionRemoveAll(c: MutableCollection, t1: T, t2: T) { c.addAll(arrayList(t1, t2)) c.removeAll(arrayList(t1)) assertEquals(arrayList(t2), c) } fun testMutableCollectionRetainAll(c: MutableCollection, t1: T, t2: T) { c.addAll(arrayList(t1, t2)) c.retainAll(arrayList(t1)) assertEquals(arrayList(t1), c) } fun testMutableCollectionClear(c: MutableCollection) { c.clear() assertTrue(c.isEmpty()) } fun testCollection() { testCollectionSize(arrayList()) testCollectionIsEmpty(arrayList()) testCollectionContains(arrayList(1)) testCollectionIterator(arrayList(1)) testCollectionToArray(arrayList(1)) testCollectionContainsAll(arrayList("a", "b")) testMutableCollectionAdd(arrayList(), "") testMutableCollectionRemove(arrayList("a"), "a") testMutableCollectionIterator(arrayList(), 1) testMutableCollectionAddAll(arrayList(), 1, 2) testMutableCollectionRemoveAll(arrayList(), 1, 2) testMutableCollectionRetainAll(arrayList(), 1, 2) testMutableCollectionClear(arrayList(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 = arrayList() val result = arrayList() 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(arrayList(0, 1, 1, 0), indexes) assertEquals(arrayList(t1, t2, t2, t1), result) } fun testListSublist(l: List, t: T) = assertEquals(arrayList(t), l.subList(0, 1)) fun testMutableListSet(l: MutableList, t: T) { l.set(0, t) assertEquals(arrayList(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(arrayList(t1, t3, t2, t3), l) } fun testList() { testListGet(arrayList(1), 1) testListIndexOf(arrayList(1), 1) testListIterator(arrayList("a", "b"), "a", "b") testListSublist(arrayList(1, 2), 1) testMutableListSet(arrayList(2), 4) testMutableListIterator(arrayList(1, 2), 1, 2, 3) } fun testMapContainsKey(map: Map, k: K) = assertTrue(map.containsKey(k)) fun testMapKeys(map: Map, k1: K, k2: K) = assertEqualCollections(hashSet(k1, k2), map.keySet()) fun testMapValues(map: Map, v1: V, v2: V) = assertEqualCollections(hashSet(v1, v2), map.values()) fun testMapEntrySet(map: Map, k : K, v: V) { for (entry in map.entrySet()) { assertEquals(k, entry.key) assertEquals(v, entry.value) } } fun testMutableMapEntry(map: MutableMap, k1 : K, v: V) { for (entry in map.entrySet()) { entry.setValue(v) } assertEquals(hashMap(k1 to v), map) } fun testMap() { testMapContainsKey(hashMap(1 to 'a', 2 to 'b'), 2) testMapKeys(hashMap(1 to 'a', 2 to 'b'), 1, 2) testMapValues(hashMap(1 to 'a', 2 to 'b'), 'a', 'b') testMapEntrySet(hashMap(1 to 'a'), 1, 'a') testMutableMapEntry(hashMap(1 to 'a'), 1, 'b') } fun box() : String { testCollection() testList() testMap() return "OK" } fun assertEqualCollections(c1: Collection, c2: Collection) = assertEquals(c1.toCollection(hashSet()), c2.toCollection(hashSet()))