// This file is compiled into each stepping test only if the WITH_STDLIB directive is NOT specified. package testUtils import kotlin.reflect.KClass inline fun Array.map(noinline transform: (T) -> S): Array = asDynamic().map(transform).unsafeCast>() inline fun Array.some(noinline predicate: (T) -> Boolean): Boolean = asDynamic().some(predicate).unsafeCast() internal data class Pair(val first: A, val second: B) internal infix fun A.to(that: B) = Pair(this, that) /** * A simple polyfill. We don't need fancy hashsets, since we don't deal with many values in the helpers. */ private class ArraySet(private val array: Array) : Set { override val size: Int get() = array.size override fun contains(element: T) = array.some { it == element } override fun containsAll(elements: Collection): Boolean { for (element in elements) { if (!contains(element)) return false } return true } override fun isEmpty() = size == 0 override fun iterator(): Iterator = array.iterator() } /** * A simple polyfill. We don't need fancy hashmaps, since we don't deal with many values in the helpers. */ private class ArrayMap(private val array: Array>): Map { private class Entry(override val key: Key, override val value: Value) : Map.Entry override val entries: Set> get() = ArraySet(array.map { Entry(it.first, it.second) }) override val keys: Set get() = ArraySet(array.map { it.first }) override val values: Collection get() = ArraySet(array.map { it.second }) override val size: Int get() = array.size override fun containsKey(key: Key) = array.some { it.first == key } override fun containsValue(value: Value) = array.some { it.second == value } override fun get(key: Key): Value? { for ((first, second) in array) { if (first == key) return second } return null } override fun isEmpty() = size == 0 fun put(key: Key, value: Value): Value? { for (i in 0 until size) { val entry = array[i] if (entry.first == key) { array[i] = key to value return entry.second } } array.asDynamic().push(key to value) return null } } internal fun mapOf(vararg pairs: Pair): Map = ArrayMap(arrayOf(*pairs)) internal operator fun Map.plus(map: Map): Map { val newMap = ArrayMap(arrayOf()) for (entry in this.entries) { newMap.put(entry.key, entry.value) } for (entry in map.entries) { newMap.put(entry.key, entry.value) } return newMap } internal val stdlibFqNames = mapOf, String>()