// KJS_WITH_FULL_RUNTIME // EXPECTED_REACHABLE_NODES: 1714 // KT-2468 ArrayList is List or HashSet is Set fails in generated JS code package foo class A fun checkAbstractList(obj: Any) { assertTrue(obj is AbstractMutableList<*>, "checkAbstractList: is AbstractMutableList") assertTrue(obj is MutableList<*>, "checkAbstractList: is MutableList") assertTrue(obj is List<*>, "checkAbstractList: is List") assertTrue(obj is AbstractMutableCollection<*>, "checkAbstractList: is AbstractMutableCollection") assertTrue(obj is MutableCollection<*>, "checkAbstractList: is MutableCollection") assertTrue(obj is Collection<*>, "checkAbstractList: is Collection") assertTrue(obj is MutableIterable<*>, "checkAbstractList: is MutableIterable") assertTrue(obj is Iterable<*>, "checkAbstractList: is Iterable") assertTrue((obj as Iterable<*>).iterator() is Iterator, "checkAbstractList: iterator() is Iterator") } fun checkArrayList(obj: Any) { assertTrue(obj is ArrayList<*>, "checkArrayList: is ArrayList") assertTrue((obj as Iterable<*>).iterator() is MutableIterator, "checkAbstractList: iterator() is MutableIterator") checkAbstractList(obj) } fun checkHashSet(obj: Any) { assertTrue(obj is HashSet<*>, "checkHashSet: is HashSet") assertTrue(obj is AbstractMutableSet<*>, "checkHashSet: is AbstractMutableSet") assertTrue(obj is AbstractMutableCollection<*>, "checkHashSet: is AbstractMutableCollection") assertTrue(obj is MutableCollection<*>, "checkHashSet: is MutableCollection") assertTrue(obj is Collection<*>, "checkHashSet: is Collection") assertTrue(obj is MutableIterable<*>, "checkHashSet: is MutableIterable") assertTrue(obj is Iterable<*>, "checkHashSet: is Iterable") assertTrue(obj is MutableSet<*>, "checkHashSet: is MutableSet") assertTrue(obj is Set<*>, "checkHashSet: is Set") assertTrue((obj as Set<*>).iterator() is Iterator, "checkHashSet: iterator() is Iterator") assertTrue((obj as Set<*>).iterator() is MutableIterator, "checkHashSet: iterator() is MutableIterator") } fun checkLinkedHashSet(obj: Any) { assertTrue(obj is LinkedHashSet<*>, "checkLinkedHashSet: is LinkedHashSet") checkHashSet(obj) } fun checkHashMap(obj: Any) { assertTrue(obj is HashMap<*, *>, "checkHashMap: is HashMap") assertTrue(obj is MutableMap<*, *>, "checkHashMap: is MutableMap") assertTrue(obj is Map<*, *>, "checkHashMap: is Map") assertTrue((obj as Map<*, *>).values is Collection, "checkHashMap: values is Collection") assertTrue((obj as Map<*, *>).keys is Set, "checkHashMap: keys is Set") } fun checkLinkedHashMap(obj: Any) { assertTrue(obj is LinkedHashMap<*, *>, "checkLinkedHashMap: is LinkedHashMap") checkHashMap(obj) } fun box(): String { checkArrayList(ArrayList()) checkArrayList(arrayListOf(1, 2, 3)) checkArrayList(ArrayList()) checkArrayList(arrayListOf("first", "second")) checkArrayList(ArrayList()) checkArrayList(arrayListOf(A())) checkHashSet(HashSet()) checkHashSet(hashSetOf(1)) checkLinkedHashSet(LinkedHashSet(0)) checkHashSet(HashSet()) checkHashSet(hashSetOf(1.0)) checkLinkedHashSet(LinkedHashSet(0)) checkHashSet(HashSet()) checkHashSet(hashSetOf("test")) checkLinkedHashSet(LinkedHashSet(0)) checkHashSet(HashSet()) checkHashSet(hashSetOf(A())) checkLinkedHashSet(LinkedHashSet(0)) checkHashMap(HashMap()) checkHashMap(hashMapOf(1 to "test")) checkLinkedHashMap(LinkedHashMap()) checkHashMap(HashMap()) checkHashMap(hashMapOf(1.0 to "test")) checkLinkedHashMap(LinkedHashMap()) checkHashMap(HashMap()) checkHashMap(HashMap()) checkLinkedHashMap(LinkedHashMap()) return "OK" }