package test.collections import kotlin.test.* import java.util.* import org.junit.Test as test class MapTest { test fun getOrElse() { val data = HashMap() val a = data.getOrElse("foo"){2} assertEquals(2, a) val b = data.getOrElse("foo"){3} assertEquals(3, b) assertEquals(0, data.size()) val empty = HashMap() val c = empty.getOrElse("") {null} assertEquals(null, c) } test fun getOrPut() { val data = HashMap() val a = data.getOrPut("foo"){2} assertEquals(2, a) val b = data.getOrPut("foo"){3} assertEquals(2, b) assertEquals(1, data.size()) val empty = HashMap() val c = empty.getOrPut("") {null} assertEquals(null, c) } test fun sizeAndEmpty() { val data = HashMap() assertTrue{ data.empty } assertEquals(data.size, 0) } test fun setViaIndexOperators() { val map = HashMap() assertTrue{ map.empty } assertEquals(map.size, 0) map["name"] = "James" assertTrue{ !map.empty } assertEquals(map.size(), 1) assertEquals("James", map["name"]) } test fun iterate() { val map = TreeMap() map["beverage"] = "beer" map["location"] = "Mells" map["name"] = "James" val list = arrayList() for (e in map) { println("key = ${e.getKey()}, value = ${e.getValue()}") list.add(e.getKey()) list.add(e.getValue()) } assertEquals(6, list.size()) assertEquals("beverage,beer,location,Mells,name,James", list.makeString(",")) } test fun iterateWithProperties() { val map = TreeMap() map["beverage"] = "beer" map["location"] = "Mells" map["name"] = "James" val list = arrayList() for (e in map) { println("key = ${e.key}, value = ${e.value}") list.add(e.key) list.add(e.value) } assertEquals(6, list.size()) assertEquals("beverage,beer,location,Mells,name,James", list.makeString(",")) } test fun iterateWithExtraction() { val map = TreeMap() map["beverage"] = "beer" map["location"] = "Mells" map["name"] = "James" val list = arrayList() for ((key, value) in map) { println("key = ${key}, value = ${value}") list.add(key) list.add(value) } assertEquals(6, list.size()) assertEquals("beverage,beer,location,Mells,name,James", list.makeString(",")) } test fun map() { val m1 = TreeMap() m1["beverage"] = "beer" m1["location"] = "Mells" val list = m1.map{ it.value + " rocks" } println("Got new list $list") assertEquals(arrayList("beer rocks", "Mells rocks"), list) } test fun mapValues() { val m1 = TreeMap() m1["beverage"] = "beer" m1["location"] = "Mells" val m2 = m1.mapValues{ it.value + "2" } println("Got new map $m2") assertEquals(arrayList("beer2", "Mells2"), m2.values().toList()) } test fun createUsingTuples() { val map = hashMap(Pair("a", 1), Pair("b", 2)) assertEquals(2, map.size) assertEquals(1, map.get("a")) assertEquals(2, map.get("b")) } test fun createUsingTo() { val map = hashMap("a" to 1, "b" to 2) assertEquals(2, map.size) assertEquals(1, map.get("a")) assertEquals(2, map.get("b")) } test fun createLinkedMap() { val map = linkedMap(Pair("c", 3), Pair("b", 2), Pair("a", 1)) assertEquals(1, map.get("a")) assertEquals(2, map.get("b")) assertEquals(3, map.get("c")) assertEquals(arrayList("c", "b", "a"), map.keySet().toList()) } test fun createSortedMap() { val map = sortedMap(Pair("c", 3), Pair("b", 2), Pair("a", 1)) assertEquals(1, map.get("a")) assertEquals(2, map.get("b")) assertEquals(3, map.get("c")) assertEquals(arrayList("a", "b", "c"), map.keySet()!!.toList()) } test fun toSortedMap() { val map = hashMap(Pair("c", 3), Pair("b", 2), Pair("a", 1)) val sorted = map.toSortedMap() assertEquals(1, sorted.get("a")) assertEquals(2, sorted.get("b")) assertEquals(3, sorted.get("c")) assertEquals(arrayList("a", "b", "c"), sorted.keySet()!!.toList()) } test fun toSortedMapWithComparator() { val map = hashMap(Pair("c", 3), Pair("bc", 2), Pair("bd", 4), Pair("abc", 1)) val c = comparator{ a, b -> val answer = a.length() - b.length() if (answer == 0) a.compareTo(b) else answer } val sorted = map.toSortedMap(c) assertEquals(arrayList("c", "bc", "bd", "abc"), sorted.keySet()!!.toList()) assertEquals(1, sorted.get("abc")) assertEquals(2, sorted.get("bc")) assertEquals(3, sorted.get("c")) } /** TODO test case for http://youtrack.jetbrains.com/issue/KT-1773 test fun compilerBug() { val map = TreeMap() map["beverage"] = "beer" map["location"] = "Mells" map["name"] = "James" var list = arrayList() for (e in map) { println("key = ${e.getKey()}, value = ${e.getValue()}") list += e.getKey() list += e.getValue() } assertEquals(6, list.size()) assertEquals("beverage,beer,location,Mells,name,James", list.makeString(",")) println("==== worked! $list") } */ test fun toProperties() { val map = hashMap("a" to "A", "b" to "B") val prop = map.toProperties() assertEquals(2, prop.size) assertEquals("A", prop.getProperty("a", "fail")) assertEquals("B", prop.getProperty("b", "fail")) } }