backend/tests: Add blackbox tests from Kotlin JVM
Added tests from testData/codegen/box directory. There are blackbox tests in other directories and they are to be added.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
fun aa(vararg a : String): String = a[0]
|
||||
|
||||
fun box(): String {
|
||||
var result: String = ""
|
||||
var i = 1
|
||||
while (3 > i++) {
|
||||
result = aa(if (true) "OK" else "fail")
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package whats.the.difference
|
||||
|
||||
fun iarray(vararg a : Int) = a // BUG
|
||||
val IntArray.indices: IntRange get() = IntRange(0, lastIndex())
|
||||
fun IntArray.lastIndex() = size - 1
|
||||
|
||||
fun box() : String {
|
||||
val vals = iarray(789, 678, 567, 456, 345, 234, 123, 12)
|
||||
val diffs = HashSet<Int>()
|
||||
for (i in vals.indices)
|
||||
for (j in i..vals.lastIndex())
|
||||
diffs.add(vals[i] - vals[j])
|
||||
val size = diffs.size
|
||||
|
||||
if (size != 8) return "Fail $size"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
|
||||
fun barB(vararg args: Byte) = args
|
||||
fun barC(vararg args: Char) = args
|
||||
fun barD(vararg args: Double) = args
|
||||
fun barF(vararg args: Float) = args
|
||||
fun barI(vararg args: Int) = args
|
||||
fun barJ(vararg args: Long) = args
|
||||
fun barS(vararg args: Short) = args
|
||||
fun barZ(vararg args: Boolean) = args
|
||||
|
||||
fun sumInt(x: Int, vararg args: Int): Int {
|
||||
var result = x
|
||||
for(a in args) {
|
||||
result += a
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun sumFunOnParameters(x: Int, vararg args: Int, f: (Int) -> Int): Int {
|
||||
var result = f(x)
|
||||
for(a in args) {
|
||||
result += f(a)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun concatParameters(vararg args: Int): String {
|
||||
var result = ""
|
||||
for(a in args) {
|
||||
result += a.toString()
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
|
||||
val aB = ByteArray(3)
|
||||
val aC = CharArray(3)
|
||||
val aD = DoubleArray(3)
|
||||
val aF = FloatArray(3)
|
||||
val aI = IntArray(3)
|
||||
aI[0] = 1
|
||||
aI[1] = 2
|
||||
aI[2] = 3
|
||||
val bI = IntArray(2)
|
||||
bI[0] = 4
|
||||
bI[1] = 5
|
||||
val aJ = LongArray(3)
|
||||
val aS = ShortArray(3)
|
||||
val aZ = BooleanArray(3)
|
||||
|
||||
|
||||
if (barB(*aB, 23.toByte()).size != 4) return "fail: Byte"
|
||||
if (barB(11.toByte(), *aB, 23.toByte(), *aB).size != 8) return "fail: Byte"
|
||||
|
||||
if (barC(*aC, 'A').size != 4) return "fail: Char"
|
||||
if (barC('A', *aC, 'A', *aC).size != 8) return "fail: Char"
|
||||
|
||||
if (barD(*aD, 2.3).size != 4) return "fail: Double"
|
||||
if (barD(*aD, *aD, 2.3).size != 7) return "fail: Double"
|
||||
|
||||
if (barF(*aF, 2.3f).size != 4) return "fail: Float"
|
||||
if (barF(*aF, 2.3f, 1.1f).size != 5) return "fail: Float"
|
||||
|
||||
if (barI(*aI, 23).size != 4) return "fail: Int"
|
||||
if (barI(11, 10, *aI, 23).size != 6) return "fail: Int"
|
||||
if (barI(100, *aI, *aI).size != 7) return "fail: Int 3"
|
||||
|
||||
if (sumInt(100, *aI) != 106) return "fail: sumInt 1"
|
||||
if (sumInt(100, *aI, 200) != 306) return "fail: sumInt 2"
|
||||
if (sumInt(100, *aI, *aI) != 112) return "fail: sumInt 3"
|
||||
if (sumFunOnParameters(100, *aI, 200) { 2*it } != 612) return "fail: sumFunOnParameters 1"
|
||||
if (sumFunOnParameters(100, *aI, *aI) { 2*it } != 224) return "fail: sumFunOnParameters 2"
|
||||
|
||||
if (concatParameters(1,2,3) != "123") return "fail: concatParameters 1"
|
||||
if (concatParameters(*aI) != "123") return "fail: concatParameters 2"
|
||||
if (concatParameters(4, 5, *aI) != "45123") return "fail: concatParameters 3"
|
||||
if (concatParameters(*aI, 4, 5) != "12345") return "fail: concatParameters 4"
|
||||
if (concatParameters(*aI, *bI) != "12345") return "fail: concatParameters 5"
|
||||
if (concatParameters(*aI, 7, 8, *bI) != "1237845") return "fail: concatParameters 6"
|
||||
if (concatParameters(*aI, 7, *bI, *aI, 9) != "1237451239") return "fail: concatParameters 7"
|
||||
|
||||
if (barJ(*aJ, 23L).size != 4) return "fail: Long"
|
||||
if (barJ(*aJ, 23L, *aJ, *aJ).size != 10) return "fail: Long"
|
||||
|
||||
if (barS(*aS, 23.toShort()).size != 4) return "fail: Short"
|
||||
if (barS(*aS, *aS, 23.toShort(), *aS).size != 10) return "fail: Short"
|
||||
|
||||
if (barZ(*aZ, true).size != 4) return "fail: Boolean"
|
||||
if (barZ(false, *aZ, true, *aZ).size != 8) return "fail: Boolean"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
operator fun <T> Array<T>?.get(i : Int?) = this!!.get(i!!)
|
||||
fun <T> array(vararg t : T) : Array<T> = t as Array<T>
|
||||
|
||||
fun box() : String {
|
||||
val a : Array<String>? = array<String>("Str", "Str2")
|
||||
val i : Int? = 1
|
||||
return if(a[i] == "Str2") "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// 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 copyIntArray(vararg data: Int): IntArray = 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 iarr = IntArray(1)
|
||||
iarr[0] = 1
|
||||
val iarr2 = copyIntArray(*iarr)
|
||||
iarr[0] = 42
|
||||
assertEquals(iarr2[0], 1, "Failed: IntArray")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
fun box(): String {
|
||||
if (test1() != "") return "fail 1"
|
||||
if (test1(1) != "1") return "fail 2"
|
||||
if (test1(1, 2) != "12") return "fail 3"
|
||||
|
||||
if (test1(*intArrayOf()) != "") return "fail 4"
|
||||
if (test1(*intArrayOf(1)) != "1") return "fail 5"
|
||||
if (test1(*intArrayOf(1, 2)) != "12") return "fail 6"
|
||||
|
||||
if (test1(p = 1) != "1") return "fail 7"
|
||||
|
||||
if (test1(p = *intArrayOf()) != "") return "fail 8"
|
||||
if (test1(p = *intArrayOf(1)) != "1") return "fail 9"
|
||||
if (test1(p = *intArrayOf(1, 2)) != "12") return "fail 10"
|
||||
|
||||
if (test2() != "") return "fail 11"
|
||||
if (test2("1") != "1") return "fail 12"
|
||||
if (test2("1", "2") != "12") return "fail 13"
|
||||
|
||||
if (test2(*arrayOf<String>()) != "") return "fail 14"
|
||||
if (test2(*arrayOf<String>("1")) != "1") return "fail 15"
|
||||
if (test2(*arrayOf<String>("1", "2")) != "12") return "fail 16"
|
||||
|
||||
if (test2(p = "1") != "1") return "fail 17"
|
||||
|
||||
if (test2(p = *arrayOf<String>()) != "") return "fail 18"
|
||||
if (test2(p = *arrayOf<String>("1")) != "1") return "fail 19"
|
||||
if (test2(p = *arrayOf<String>("1", "2")) != "12") return "fail 20"
|
||||
|
||||
if (test3<String>() != "") return "fail 21"
|
||||
if (test3("1") != "1") return "fail 22"
|
||||
if (test3("1", "2") != "12") return "fail 23"
|
||||
|
||||
if (test3(*arrayOf<String>()) != "") return "fail 24"
|
||||
if (test3(*arrayOf<String>("1")) != "1") return "fail 25"
|
||||
if (test3(*arrayOf<String>("1", "2")) != "12") return "fail 26"
|
||||
|
||||
if (test3(p = "1") != "1") return "fail 27"
|
||||
|
||||
if (test3(p = *arrayOf<String>()) != "") return "fail 28"
|
||||
if (test3(p = *arrayOf<String>("1")) != "1") return "fail 29"
|
||||
if (test3(p = *arrayOf<String>("1", "2")) != "12") return "fail 30"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun test1(vararg p: Int): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun test2(vararg p: String): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun <T> test3(vararg p: T): String {
|
||||
var result = ""
|
||||
for (i in p) {
|
||||
result += i
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
// FILE: A.java
|
||||
|
||||
public class A {
|
||||
public int foo(int x, String ... args) {
|
||||
return x + args.length;
|
||||
}
|
||||
|
||||
public static String[] ar = new String[] { "a", "b"};
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun bar(args: Array<String>?): Int {
|
||||
var res = 0
|
||||
|
||||
if (args != null) {
|
||||
res += A().foo(1, *args)
|
||||
}
|
||||
|
||||
res += A().foo(1, *A.ar)
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (bar(null) != 3) return "Fail"
|
||||
|
||||
if (bar(A.ar) != 6) return "Fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
fun foo(a: Int, vararg b: Int, f: (IntArray) -> String): String {
|
||||
return "test" + a + " " + f(b)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val test1 = foo(1) {a -> "" + a.size}
|
||||
if (test1 != "test1 0") return test1
|
||||
|
||||
val test2 = foo(2, 2) {a -> "" + a.size}
|
||||
if (test2 != "test2 1") return test2
|
||||
|
||||
val test3 = foo(3, 2, 3) {a -> "" + a.size}
|
||||
if (test3 != "test3 2") return test3
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user