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:
Ilya Matveev
2017-01-12 19:43:20 +07:00
parent d5988297b1
commit 1b553ebfaf
2643 changed files with 66666 additions and 0 deletions
@@ -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"
}
@@ -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"
}