Files
kotlin-fork/compiler/testData/codegen/box/arrays/kt2997.kt
T
Alexander Udalov 93696ff9bd Make Array.indices extension property, move to stdlib
This is not something that needs to be intrinsified. Note that compiler
optimizations are still possible and the fact whether 'indices' is a member or
an extension is irrelevant to the optimizer
2014-11-17 15:20:44 +03:00

78 lines
1.7 KiB
Kotlin

//KT-2997 Automatically cast error (Array)
fun foo(a: Any): Int {
if (a is IntArray) {
a.get(0)
a.set(0, 1)
a.iterator()
return a.size()
}
if (a is ShortArray) {
a.get(0)
a.set(0, 1)
a.iterator()
return a.size()
}
if (a is ByteArray) {
a.get(0)
a.set(0, 1)
a.iterator()
return a.size()
}
if (a is FloatArray) {
a.get(0)
a.set(0, 1.toFloat())
a.iterator()
return a.size()
}
if (a is DoubleArray) {
a.get(0)
a.set(0, 1.0)
a.iterator()
return a.size()
}
if (a is BooleanArray) {
a.get(0)
a.set(0, false)
a.iterator()
return a.size()
}
if (a is CharArray) {
a.get(0)
a.set(0, 'a')
a.iterator()
return a.size()
}
if (a is Array<*>) {
if (a.size() > 0) a.get(0)
a.iterator()
return a.size()
}
return 0
}
fun box(): String {
val iA = IntArray(1)
if (foo(iA) != 1) return "fail int[]"
val sA = ShortArray(1)
if (foo(sA) != 1) return "fail short[]"
val bA = ByteArray(1)
if (foo(bA) != 1) return "fail byte[]"
val fA = FloatArray(1)
if (foo(fA) != 1) return "fail float[]"
val dA = DoubleArray(1)
if (foo(dA) != 1) return "fail double[]"
val boolA = BooleanArray(1)
if (foo(boolA) != 1) return "fail boolean[]"
val cA = CharArray(1)
if (foo(cA) != 1) return "fail char[]"
val oA = Array<Any>(1) { 1 }
if (foo(oA) != 1) return "fail Any[]"
val sArray = Array<String>(0) { "" }
if (foo(sArray) != 0) return "fail String[]"
return "OK"
}