38aec7333b
In fact, the commit c3926219 should do it before because the relevant
difference was removed in this commit
142 lines
6.2 KiB
Kotlin
Vendored
142 lines
6.2 KiB
Kotlin
Vendored
// WITH_STDLIB
|
|
// JVM_ABI_K1_K2_DIFF: KT-63828
|
|
|
|
class Itr : Iterator<String> by ArrayList<String>().iterator()
|
|
class MItr : MutableIterator<String> by ArrayList<String>().iterator()
|
|
class LItr : ListIterator<String> by ArrayList<String>().listIterator()
|
|
class MLItr : MutableListIterator<String> by ArrayList<String>().listIterator()
|
|
|
|
class It : Iterable<String> by ArrayList<String>()
|
|
class MIt : MutableIterable<String> by ArrayList<String>()
|
|
class C : Collection<String> by ArrayList<String>()
|
|
class MC : MutableCollection<String> by ArrayList<String>()
|
|
class L : List<String> by ArrayList<String>()
|
|
class ML : MutableList<String> by ArrayList<String>()
|
|
class S : Set<String> by HashSet<String>()
|
|
class MS : MutableSet<String> by HashSet<String>()
|
|
|
|
class M : Map<String, String> by HashMap<String, String>()
|
|
class MM : MutableMap<String, String> by HashMap<String, String>()
|
|
|
|
class ME : Map.Entry<String, String> {
|
|
override val key: String get() = throw UnsupportedOperationException()
|
|
override val value: String get() = throw UnsupportedOperationException()
|
|
}
|
|
|
|
class MME : MutableMap.MutableEntry<String, String> {
|
|
override val key: String get() = throw UnsupportedOperationException()
|
|
override val value: String get() = throw UnsupportedOperationException()
|
|
override fun setValue(value: String): String = throw UnsupportedOperationException()
|
|
}
|
|
|
|
fun assert(condition: Boolean, message: () -> String) { if (!condition) throw AssertionError(message())}
|
|
|
|
|
|
inline fun safeAsReturnsNull(operation: String, cast: () -> Any?) {
|
|
try {
|
|
val x = cast()
|
|
assert(x == null) { "$operation: should return null, got $x" }
|
|
}
|
|
catch (e: Throwable) {
|
|
throw AssertionError("$operation: should not throw exceptions, got $e")
|
|
}
|
|
}
|
|
|
|
inline fun safeAsReturnsNonNull(operation: String, cast: () -> Any?) {
|
|
try {
|
|
val x = cast()
|
|
assert(x != null) { "$operation: should return non-null" }
|
|
}
|
|
catch (e: Throwable) {
|
|
throw AssertionError("$operation: should not throw exceptions, got $e")
|
|
}
|
|
}
|
|
|
|
fun box(): String {
|
|
val itr = Itr() as Any
|
|
val mitr = MItr()
|
|
|
|
safeAsReturnsNull("itr as? MutableIterator") { itr as? MutableIterator<*> }
|
|
safeAsReturnsNonNull("mitr as? MutableIterator") { mitr as? MutableIterator<*> }
|
|
|
|
val litr = LItr() as Any
|
|
val mlitr = MLItr()
|
|
|
|
safeAsReturnsNull("litr as? MutableIterator") { litr as? MutableIterator<*> }
|
|
safeAsReturnsNull("litr as? MutableListIterator") { litr as? MutableListIterator<*> }
|
|
safeAsReturnsNonNull("mlitr as? MutableIterator") { mlitr as? MutableIterator<*> }
|
|
safeAsReturnsNonNull("mlitr as? MutableListIterator") { mlitr as? MutableListIterator<*> }
|
|
|
|
val it = It() as Any
|
|
val mit = MIt()
|
|
val arrayList = ArrayList<String>()
|
|
|
|
safeAsReturnsNull("it as? MutableIterable") { it as? MutableIterable<*> }
|
|
safeAsReturnsNonNull("mit as? MutableIterable") { mit as? MutableIterable<*> }
|
|
safeAsReturnsNonNull("arrayList as? MutableIterable") { arrayList as? MutableIterable<*> }
|
|
|
|
val coll = C() as Any
|
|
val mcoll = MC()
|
|
|
|
safeAsReturnsNull("coll as? MutableIterable") { coll as? MutableIterable<*> }
|
|
safeAsReturnsNull("coll as? MutableCollection") { coll as? MutableCollection<*> }
|
|
safeAsReturnsNonNull("mcoll as? MutableIterable") { mcoll as? MutableIterable<*> }
|
|
safeAsReturnsNonNull("mcoll as? MutableCollection") { mcoll as? MutableCollection<*> }
|
|
safeAsReturnsNonNull("arrayList as? MutableCollection") { arrayList as? MutableCollection<*> }
|
|
|
|
val list = L() as Any
|
|
val mlist = ML()
|
|
|
|
safeAsReturnsNull("list as? MutableIterable") { list as? MutableIterable<*> }
|
|
safeAsReturnsNull("list as? MutableCollection") { list as? MutableCollection<*> }
|
|
safeAsReturnsNull("list as? MutableList") { list as? MutableList<*> }
|
|
safeAsReturnsNonNull("mlist as? MutableIterable") { mlist as? MutableIterable<*> }
|
|
safeAsReturnsNonNull("mlist as? MutableCollection") { mlist as? MutableCollection<*> }
|
|
safeAsReturnsNonNull("mlist as? MutableList") { mlist as? MutableList<*> }
|
|
|
|
val set = S() as Any
|
|
val mset = MS()
|
|
val hashSet = HashSet<String>()
|
|
|
|
safeAsReturnsNull("set as? MutableIterable") { set as? MutableIterable<*> }
|
|
safeAsReturnsNull("set as? MutableCollection") { set as? MutableCollection<*> }
|
|
safeAsReturnsNull("set as? MutableSet") { set as? MutableSet<*> }
|
|
safeAsReturnsNonNull("mset as? MutableIterable") { mset as? MutableIterable<*> }
|
|
safeAsReturnsNonNull("mset as? MutableCollection") { mset as? MutableCollection<*> }
|
|
safeAsReturnsNonNull("mset as? MutableSet") { mset as? MutableSet<*> }
|
|
safeAsReturnsNonNull("hashSet as? MutableSet") { hashSet as? MutableSet<*> }
|
|
|
|
val map = M() as Any
|
|
val mmap = MM()
|
|
val hashMap = HashMap<String, String>()
|
|
|
|
safeAsReturnsNull("map as? MutableMap") { map as? MutableMap<*, *> }
|
|
safeAsReturnsNonNull("mmap as? MutableMap") { mmap as? MutableMap<*, *> }
|
|
safeAsReturnsNonNull("hashMap as? MutableMap") { hashMap as? MutableMap<*, *> }
|
|
|
|
val entry = ME() as Any
|
|
val mentry = MME()
|
|
|
|
safeAsReturnsNull("entry as? MutableMap.MutableEntry") { entry as? MutableMap.MutableEntry<*, *> }
|
|
safeAsReturnsNonNull("mentry as? MutableMap.MutableEntry") { mentry as? MutableMap.MutableEntry<*, *> }
|
|
|
|
hashMap[""] = ""
|
|
val hashMapEntry = hashMap.entries.first()
|
|
|
|
safeAsReturnsNonNull("hashMapEntry as? MutableMap.MutableEntry") { hashMapEntry as? MutableMap.MutableEntry<*, *> }
|
|
|
|
safeAsReturnsNull("null as? MutableIterator") { null as? MutableIterator<*> }
|
|
safeAsReturnsNull("null as? MutableListIterator") { null as? MutableListIterator<*> }
|
|
safeAsReturnsNull("null as? MutableIterable") { null as? MutableIterable<*> }
|
|
safeAsReturnsNull("null as? MutableCollection") { null as? MutableCollection<*> }
|
|
safeAsReturnsNull("null as? MutableList") { null as? MutableList<*> }
|
|
safeAsReturnsNull("null as? MutableSet") { null as? MutableSet<*> }
|
|
safeAsReturnsNull("null as? MutableMap") { null as? MutableMap<*, *> }
|
|
safeAsReturnsNull("null as? MutableMap.MutableEntry") { null as? MutableMap.MutableEntry<*, *> }
|
|
|
|
safeAsReturnsNull("mlist as? MutableSet") { mlist as? MutableSet<*> }
|
|
safeAsReturnsNull("mlist as? MutableIterator") { mlist as? MutableIterator<*> }
|
|
|
|
return "OK"
|
|
}
|