Files
kotlin-fork/compiler/testData/codegen/box/vararg/spreadCopiesArray.kt
T
Dmitry Petrov 7d62f0b5aa JVM_IR KT-45187 use Arrays.copyOf to copy an array in spread operator
Creating a new array (and copying data into it with System.arraycopy)
doesn't work in generic case, because the actual array class depends on
call site.
2021-04-13 22:27:37 +03:00

80 lines
2.6 KiB
Kotlin
Vendored

// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: SPREAD_OPERATOR
// WITH_RUNTIME
import kotlin.test.*
fun <T> copyArray(vararg data: T): Array<out T> = data
inline fun <reified T> reifiedCopyArray(vararg data: T): Array<out T> = data
fun copyBooleanArray(vararg data: Boolean): BooleanArray = data
fun copyByteArray(vararg data: Byte): ByteArray = data
fun copyCharArray(vararg data: Char): CharArray = data
fun copyShortArray(vararg data: Short): ShortArray = data
fun copyIntArray(vararg data: Int): IntArray = data
fun copyLongArray(vararg data: Long): LongArray = data
fun copyFloatArray(vararg data: Float): FloatArray = data
fun copyDoubleArray(vararg data: Double): DoubleArray = data
fun copyStringArray(vararg data: String): Array<out String> = data
fun box(): String {
val sarr = arrayOf("OK")
val sarr2 = copyArray(*sarr)
sarr[0] = "Array was not copied"
assertEquals(sarr2[0], "OK", "Failed: Array<String>")
var rsarr = arrayOf("OK")
var rsarr2 = reifiedCopyArray(*rsarr)
rsarr[0] = "Array was not copied"
assertEquals(rsarr2[0], "OK", "Failed: Array<String>, reified copy")
val boolArray = booleanArrayOf(true)
val boolArray2 = copyBooleanArray(*boolArray)
boolArray[0] = false
assertEquals(boolArray2[0], true, "Failed: BooleanArray")
val byteArray = byteArrayOf(1)
val byteArray2 = copyByteArray(*byteArray)
byteArray[0] = 42
assertEquals(1, byteArray2[0], "Failed: ByteArray")
val charArray = charArrayOf('a')
val charArray2 = copyCharArray(*charArray)
charArray[0] = 'b'
assertEquals(charArray2[0], 'a', "Failed: CharArray")
val shortArray = shortArrayOf(1)
val shortArray2 = copyShortArray(*shortArray)
shortArray[0] = 42
assertEquals(1, shortArray2[0], "Failed: ShortArray")
val iarr = IntArray(1)
iarr[0] = 1
val iarr2 = copyIntArray(*iarr)
iarr[0] = 42
assertEquals(1, iarr2[0], "Failed: IntArray")
val longArray = longArrayOf(1L)
val longArray2 = copyLongArray(*longArray)
longArray[0] = 42L
assertEquals(1L, longArray2[0], "Failed: LongArray")
val floatArray = floatArrayOf(1.0f)
val floatArray2 = copyFloatArray(*floatArray)
floatArray[0] = 42.0f
assertEquals(1.0f, floatArray2[0], "Failed: FloatArray")
val doubleArray = doubleArrayOf(1.0)
val doubleArray2 = copyDoubleArray(*doubleArray)
doubleArray[0] = 42.0
assertEquals(1.0, doubleArray2[0], "Failed: DoubleArray")
val stringArray = arrayOf("abc")
val stringArray2 = copyStringArray(*stringArray)
stringArray[0] = "def"
assertEquals("abc", stringArray2[0], "Failed: Array<String>")
return "OK"
}