// WITH_RUNTIME inline class Z(val x: Int) inline class ZArrayMap(val storage: IntArray) : Map { override val size: Int get() = storage.size private class MapEntry(val i: Int, val si: Int): Map.Entry { override val key: Z get() = Z(i) override val value: Z get() = Z(si) } private class MapEntrySet(val storage: IntArray) : AbstractSet>() { private inner class MyIterator : Iterator> { var index = 0 override fun hasNext(): Boolean = index < size override fun next(): Map.Entry = MapEntry(index, storage[index++]) } override val size: Int get() = storage.size override fun iterator(): Iterator> = MyIterator() } override val entries: Set> get() = MapEntrySet(storage) override val keys: Set get() = (0 until size).mapTo(HashSet()) { Z(it) } override val values: Collection get() = storage.mapTo(ArrayList()) { Z(it) } override fun containsKey(key: Z): Boolean = key.x in (0 until size) override fun containsValue(value: Z): Boolean = storage.contains(value.x) override fun get(key: Z) = storage.getOrNull(key.x)?.let { Z(it) } override fun isEmpty(): Boolean = size > 0 } fun box(): String { val zm = ZArrayMap(IntArray(5)) zm.containsKey(Z(0)) zm.containsValue(Z(0)) zm[Z(0)] zm.containsKey(object {} as Any) zm.containsValue(object {} as Any) zm.get(object {} as Any) return "OK" }