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,67 @@
|
||||
fun box(): String {
|
||||
// D = 1101 C = 1100
|
||||
// 6 = 0110 5 = 0101
|
||||
var iarg1: Int = 0xDC56DC56.toInt()
|
||||
var iarg2: Int = 0x65DC65DC
|
||||
var i1 = iarg1 and iarg2
|
||||
var i2 = iarg1 or iarg2
|
||||
var i3 = iarg1 xor iarg2
|
||||
var i4 = iarg1.inv()
|
||||
var i5 = iarg1 shl 16
|
||||
var i6 = iarg1 shr 16
|
||||
var i7 = iarg1 ushr 16
|
||||
|
||||
if (i1 != 0x44544454.toInt()) return "fail: Int.and"
|
||||
if (i2 != 0xFDDEFDDE.toInt()) return "fail: Int.or"
|
||||
if (i3 != 0xB98AB98A.toInt()) return "fail: Int.xor"
|
||||
if (i4 != 0x23A923A9.toInt()) return "fail: Int.inv"
|
||||
if (i5 != 0xDC560000.toInt()) return "fail: Int.shl"
|
||||
if (i6 != 0xFFFFDC56.toInt()) return "fail: Int.shr"
|
||||
if (i7 != 0x0000DC56.toInt()) return "fail: Int.ushr"
|
||||
|
||||
|
||||
// TODO: Use long hex constants after KT-4749 is fixed
|
||||
var larg1: Long = (0xDC56DC56L shl 32) + 0xDC56DC56 // !!!!
|
||||
var larg2: Long = 0x65DC65DC65DC65DC
|
||||
var l1 = larg1 and larg2
|
||||
var l2 = larg1 or larg2
|
||||
var l3 = larg1 xor larg2
|
||||
var l4 = larg1.inv()
|
||||
var l5 = larg1 shl 32
|
||||
var l6 = larg1 shr 32
|
||||
var l7 = larg1 ushr 32
|
||||
|
||||
if (l1 != 0x4454445444544454) return "fail: Long.and"
|
||||
if (l2 != (0xFDDEFDDEL shl 32) + 0xFDDEFDDE) return "fail: Long.or"
|
||||
if (l3 != (0xB98AB98AL shl 32) + 0xB98AB98A) return "fail: Long.xor"
|
||||
if (l4 != 0x23A923A923A923A9) return "fail: Long.inv"
|
||||
if (l5 != (0xDC56DC56L shl 32)/*!!!*/) return "fail: Long.shl"
|
||||
if (l6 != (0xFFFFFFFFL shl 32) + 0xDC56DC56) return "fail: Long.shr"
|
||||
if (l7 != (0x00000000L shl 32) + 0xDC56DC56.toLong()) return "fail: Long.ushr"
|
||||
|
||||
var sarg1: Short = 0xDC56.toShort()
|
||||
var sarg2: Short = 0x65DC.toShort()
|
||||
var s1 = sarg1 and sarg2
|
||||
var s2 = sarg1 or sarg2
|
||||
var s3 = sarg1 xor sarg2
|
||||
var s4 = sarg1.inv()
|
||||
|
||||
if (s1 != 0x4454.toShort()) return "fail: Short.and"
|
||||
if (s2 != 0xFDDE.toShort()) return "fail: Short.or"
|
||||
if (s3 != 0xB98A.toShort()) return "fail: Short.xor"
|
||||
if (s4 != 0x23A9.toShort()) return "fail: Short.inv"
|
||||
|
||||
var barg1: Byte = 0xDC.toByte()
|
||||
var barg2: Byte = 0x65.toByte()
|
||||
var b1 = barg1 and barg2
|
||||
var b2 = barg1 or barg2
|
||||
var b3 = barg1 xor barg2
|
||||
var b4 = barg1.inv()
|
||||
|
||||
if (b1 != 0x44.toByte()) return "fail: Byte.and"
|
||||
if (b2 != 0xFD.toByte()) return "fail: Byte.or"
|
||||
if (b3 != 0xB9.toByte()) return "fail: Byte.xor"
|
||||
if (b4 != 0x23.toByte()) return "fail: Byte.inv"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
fun box(): String {
|
||||
// D = 1101 C = 1100
|
||||
// 6 = 0110 5 = 0101
|
||||
var iarg1: Int = 0xDC56DC56.toInt()
|
||||
var iarg2: Int = 0x65DC65DC
|
||||
var i1: Any = iarg1 and iarg2
|
||||
var i2: Any = iarg1 or iarg2
|
||||
var i3: Any = iarg1 xor iarg2
|
||||
var i4: Any = iarg1.inv()
|
||||
var i5: Any = iarg1 shl 16
|
||||
var i6: Any = iarg1 shr 16
|
||||
var i7: Any = iarg1 ushr 16
|
||||
|
||||
if (i1 != 0x44544454.toInt()) return "fail: Int.and"
|
||||
if (i2 != 0xFDDEFDDE.toInt()) return "fail: Int.or"
|
||||
if (i3 != 0xB98AB98A.toInt()) return "fail: Int.xor"
|
||||
if (i4 != 0x23A923A9.toInt()) return "fail: Int.inv"
|
||||
if (i5 != 0xDC560000.toInt()) return "fail: Int.shl"
|
||||
if (i6 != 0xFFFFDC56.toInt()) return "fail: Int.shr"
|
||||
if (i7 != 0x0000DC56.toInt()) return "fail: Int.ushr"
|
||||
|
||||
|
||||
// TODO: Use long hex constants after KT-4749 is fixed
|
||||
var larg1: Long = (0xDC56DC56L shl 32) + 0xDC56DC56 // !!!!
|
||||
var larg2: Long = 0x65DC65DC65DC65DC
|
||||
var l1: Any = larg1 and larg2
|
||||
var l2: Any = larg1 or larg2
|
||||
var l3: Any = larg1 xor larg2
|
||||
var l4: Any = larg1.inv()
|
||||
var l5: Any = larg1 shl 32
|
||||
var l6: Any = larg1 shr 32
|
||||
var l7: Any = larg1 ushr 32
|
||||
|
||||
if (l1 != 0x4454445444544454) return "fail: Long.and"
|
||||
if (l2 != (0xFDDEFDDEL shl 32) + 0xFDDEFDDE) return "fail: Long.or"
|
||||
if (l3 != (0xB98AB98AL shl 32) + 0xB98AB98A) return "fail: Long.xor"
|
||||
if (l4 != 0x23A923A923A923A9) return "fail: Long.inv"
|
||||
if (l5 != (0xDC56DC56L shl 32)/*!!!*/) return "fail: Long.shl"
|
||||
if (l6 != (0xFFFFFFFFL shl 32) + 0xDC56DC56) return "fail: Long.shr"
|
||||
if (l7 != (0x00000000L shl 32) + 0xDC56DC56.toLong()) return "fail: Long.ushr"
|
||||
|
||||
var sarg1: Short = 0xDC56.toShort()
|
||||
var sarg2: Short = 0x65DC.toShort()
|
||||
var s1: Any = sarg1 and sarg2
|
||||
var s2: Any = sarg1 or sarg2
|
||||
var s3: Any = sarg1 xor sarg2
|
||||
var s4: Any = sarg1.inv()
|
||||
|
||||
if (s1 != 0x4454.toShort()) return "fail: Short.and"
|
||||
if (s2 != 0xFDDE.toShort()) return "fail: Short.or"
|
||||
if (s3 != 0xB98A.toShort()) return "fail: Short.xor"
|
||||
if (s4 != 0x23A9.toShort()) return "fail: Short.inv"
|
||||
|
||||
var barg1: Byte = 0xDC.toByte()
|
||||
var barg2: Byte = 0x65.toByte()
|
||||
var b1: Any = barg1 and barg2
|
||||
var b2: Any = barg1 or barg2
|
||||
var b3: Any = barg1 xor barg2
|
||||
var b4: Any = barg1.inv()
|
||||
|
||||
if (b1 != 0x44.toByte()) return "fail: Byte.and"
|
||||
if (b2 != 0xFD.toByte()) return "fail: Byte.or"
|
||||
if (b3 != 0xB9.toByte()) return "fail: Byte.xor"
|
||||
if (b4 != 0x23.toByte()) return "fail: Byte.inv"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
fun box(): String {
|
||||
// D = 1101 C = 1100
|
||||
// 6 = 0110 5 = 0101
|
||||
var iarg1: Int = 0xDC56DC56.toInt()
|
||||
var iarg2: Int = 0x65DC65DC
|
||||
var i1: Int? = iarg1 and iarg2
|
||||
var i2: Int? = iarg1 or iarg2
|
||||
var i3: Int? = iarg1 xor iarg2
|
||||
var i4: Int? = iarg1.inv()
|
||||
var i5: Int? = iarg1 shl 16
|
||||
var i6: Int? = iarg1 shr 16
|
||||
var i7: Int? = iarg1 ushr 16
|
||||
|
||||
if (i1 != 0x44544454.toInt()) return "fail: Int.and"
|
||||
if (i2 != 0xFDDEFDDE.toInt()) return "fail: Int.or"
|
||||
if (i3 != 0xB98AB98A.toInt()) return "fail: Int.xor"
|
||||
if (i4 != 0x23A923A9.toInt()) return "fail: Int.inv"
|
||||
if (i5 != 0xDC560000.toInt()) return "fail: Int.shl"
|
||||
if (i6 != 0xFFFFDC56.toInt()) return "fail: Int.shr"
|
||||
if (i7 != 0x0000DC56.toInt()) return "fail: Int.ushr"
|
||||
|
||||
|
||||
// TODO: Use long hex constants after KT-4749 is fixed
|
||||
var larg1: Long = (0xDC56DC56L shl 32) + 0xDC56DC56 // !!!!
|
||||
var larg2: Long = 0x65DC65DC65DC65DC
|
||||
var l1: Long? = larg1 and larg2
|
||||
var l2: Long? = larg1 or larg2
|
||||
var l3: Long? = larg1 xor larg2
|
||||
var l4: Long? = larg1.inv()
|
||||
var l5: Long? = larg1 shl 32
|
||||
var l6: Long? = larg1 shr 32
|
||||
var l7: Long? = larg1 ushr 32
|
||||
|
||||
if (l1 != 0x4454445444544454) return "fail: Long.and"
|
||||
if (l2 != (0xFDDEFDDEL shl 32) + 0xFDDEFDDE) return "fail: Long.or"
|
||||
if (l3 != (0xB98AB98AL shl 32) + 0xB98AB98A) return "fail: Long.xor"
|
||||
if (l4 != 0x23A923A923A923A9) return "fail: Long.inv"
|
||||
if (l5 != (0xDC56DC56L shl 32)/*!!!*/) return "fail: Long.shl"
|
||||
if (l6 != (0xFFFFFFFFL shl 32) + 0xDC56DC56) return "fail: Long.shr"
|
||||
if (l7 != (0x00000000L shl 32) + 0xDC56DC56.toLong()) return "fail: Long.ushr"
|
||||
|
||||
var sarg1: Short = 0xDC56.toShort()
|
||||
var sarg2: Short = 0x65DC.toShort()
|
||||
var s1: Short? = sarg1 and sarg2
|
||||
var s2: Short? = sarg1 or sarg2
|
||||
var s3: Short? = sarg1 xor sarg2
|
||||
var s4: Short? = sarg1.inv()
|
||||
|
||||
if (s1 != 0x4454.toShort()) return "fail: Short.and"
|
||||
if (s2 != 0xFDDE.toShort()) return "fail: Short.or"
|
||||
if (s3 != 0xB98A.toShort()) return "fail: Short.xor"
|
||||
if (s4 != 0x23A9.toShort()) return "fail: Short.inv"
|
||||
|
||||
var barg1: Byte = 0xDC.toByte()
|
||||
var barg2: Byte = 0x65.toByte()
|
||||
var b1: Byte? = barg1 and barg2
|
||||
var b2: Byte? = barg1 or barg2
|
||||
var b3: Byte? = barg1 xor barg2
|
||||
var b4: Byte? = barg1.inv()
|
||||
|
||||
if (b1 != 0x44.toByte()) return "fail: Byte.and"
|
||||
if (b2 != 0xFD.toByte()) return "fail: Byte.or"
|
||||
if (b3 != 0xB9.toByte()) return "fail: Byte.xor"
|
||||
if (b4 != 0x23.toByte()) return "fail: Byte.inv"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Byte = 1.plus(1)
|
||||
val a2: Short = 1.plus(1)
|
||||
val a3: Int = 1.plus(1)
|
||||
val a4: Long = 1.plus(1)
|
||||
val a5: Double = 1.0.plus(1)
|
||||
val a6: Float = 1f.plus(1)
|
||||
val a7: Char = 'A'.plus(1)
|
||||
val a8: Int = 'B'.minus('A')
|
||||
|
||||
if (a1 != 2.toByte()) return "fail 1"
|
||||
if (a2 != 2.toShort()) return "fail 2"
|
||||
if (a3 != 2) return "fail 3"
|
||||
if (a4 != 2L) return "fail 4"
|
||||
if (a5 != 2.0) return "fail 5"
|
||||
if (a6 != 2f) return "fail 6"
|
||||
if (a7 != 'B') return "fail 7"
|
||||
if (a8 != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Any = 1.toByte().plus(1)
|
||||
val a2: Any = 1.toShort().plus(1)
|
||||
val a3: Any = 1.plus(1)
|
||||
val a4: Any = 1L.plus(1)
|
||||
val a5: Any = 1.0.plus(1)
|
||||
val a6: Any = 1f.plus(1)
|
||||
val a7: Any = 'A'.plus(1)
|
||||
val a8: Any = 'B'.minus('A')
|
||||
|
||||
if (a1 !is Int || a1 != 2) return "fail 1"
|
||||
if (a2 !is Int || a2 != 2) return "fail 2"
|
||||
if (a3 !is Int || a3 != 2) return "fail 3"
|
||||
if (a4 !is Long || a4 != 2L) return "fail 4"
|
||||
if (a5 !is Double || a5 != 2.0) return "fail 5"
|
||||
if (a6 !is Float || a6 != 2f) return "fail 6"
|
||||
if (a7 !is Char || a7 != 'B') return "fail 7"
|
||||
if (a8 !is Int || a8 != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Byte? = 1.plus(1)
|
||||
val a2: Short? = 1.plus(1)
|
||||
val a3: Int? = 1.plus(1)
|
||||
val a4: Long? = 1.plus(1)
|
||||
val a5: Double? = 1.0.plus(1)
|
||||
val a6: Float? = 1f.plus(1)
|
||||
val a7: Char? = 'A'.plus(1)
|
||||
val a8: Int? = 'B'.minus('A')
|
||||
|
||||
if (a1!! != 2.toByte()) return "fail 1"
|
||||
if (a2!! != 2.toShort()) return "fail 2"
|
||||
if (a3!! != 2) return "fail 3"
|
||||
if (a4!! != 2L) return "fail 4"
|
||||
if (a5!! != 2.0) return "fail 5"
|
||||
if (a6!! != 2f) return "fail 6"
|
||||
if (a7!! != 'B') return "fail 7"
|
||||
if (a8!! != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// reason - multifile tests are not supported in JS tests
|
||||
//FILE: Holder.java
|
||||
|
||||
class Holder {
|
||||
public Double value;
|
||||
public Holder(Double value) { this.value = value; }
|
||||
}
|
||||
|
||||
//FILE: test.kt
|
||||
|
||||
import Holder
|
||||
|
||||
fun box(): String {
|
||||
val j = Holder(0.99)
|
||||
return if (j.value > 0) "OK" else "fail"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// reason - multifile tests are not supported in JS tests
|
||||
//FILE: JavaClass.java
|
||||
|
||||
class JavaClass {
|
||||
public static Long get() { return 2364137526064485012L; }
|
||||
}
|
||||
|
||||
//FILE: test.kt
|
||||
|
||||
import JavaClass
|
||||
|
||||
fun box(): String {
|
||||
return if (JavaClass.get() > 0) "OK" else "fail"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
// reason - no ArithmeticException in JS
|
||||
fun box(): String {
|
||||
val a1 = 0
|
||||
val a2 = try { 1 / 0 } catch(e: ArithmeticException) { 0 }
|
||||
val a3 = try { 1 / a1 } catch(e: ArithmeticException) { 0 }
|
||||
val a4 = try { 1 / a2 } catch(e: ArithmeticException) { 0 }
|
||||
val a5 = try { 2 * (1 / 0) } catch(e: ArithmeticException) { 0 }
|
||||
val a6 = try { 2 * 1 / 0 } catch(e: ArithmeticException) { 0 }
|
||||
|
||||
try { val s1 = "${2 * (1 / 0) }" } catch(e: ArithmeticException) { }
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Byte = 1 + 1
|
||||
val a2: Short = 1 + 1
|
||||
val a3: Int = 1 + 1
|
||||
val a4: Long = 1 + 1
|
||||
val a5: Double = 1.0 + 1
|
||||
val a6: Float = 1f + 1
|
||||
val a7: Char = 'A' + 1
|
||||
val a8: Int = 'B' - 'A'
|
||||
|
||||
if (a1 != 2.toByte()) return "fail 1"
|
||||
if (a2 != 2.toShort()) return "fail 2"
|
||||
if (a3 != 2) return "fail 3"
|
||||
if (a4 != 2L) return "fail 4"
|
||||
if (a5 != 2.0) return "fail 5"
|
||||
if (a6 != 2f) return "fail 6"
|
||||
if (a7 != 'B') return "fail 7"
|
||||
if (a8 != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Any = 1.toByte() + 1
|
||||
val a2: Any = 1.toShort() + 1
|
||||
val a3: Any = 1 + 1
|
||||
val a4: Any = 1L + 1
|
||||
val a5: Any = 1.0 + 1
|
||||
val a6: Any = 1f + 1
|
||||
val a7: Any = 'A' + 1
|
||||
val a8: Any = 'B' - 'A'
|
||||
|
||||
if (a1 !is Int || a1 != 2) return "fail 1"
|
||||
if (a2 !is Int || a2 != 2) return "fail 2"
|
||||
if (a3 !is Int || a3 != 2) return "fail 3"
|
||||
if (a4 !is Long || a4 != 2L) return "fail 4"
|
||||
if (a5 !is Double || a5 != 2.0) return "fail 5"
|
||||
if (a6 !is Float || a6 != 2f) return "fail 6"
|
||||
if (a7 !is Char || a7 != 'B') return "fail 7"
|
||||
if (a8 !is Int || a8 != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
fun box(): String {
|
||||
val a1: Byte? = 1 + 1
|
||||
val a2: Short? = 1 + 1
|
||||
val a3: Int? = 1 + 1
|
||||
val a4: Long? = 1 + 1
|
||||
val a5: Double? = 1.0 + 1
|
||||
val a6: Float? = 1f + 1
|
||||
val a7: Char? = 'A' + 1
|
||||
val a8: Int? = 'B' - 'A'
|
||||
|
||||
if (a1!! != 2.toByte()) return "fail 1"
|
||||
if (a2!! != 2.toShort()) return "fail 2"
|
||||
if (a3!! != 2) return "fail 3"
|
||||
if (a4!! != 2L) return "fail 4"
|
||||
if (a5!! != 2.0) return "fail 5"
|
||||
if (a6!! != 2f) return "fail 6"
|
||||
if (a7!! != 'B') return "fail 7"
|
||||
if (a8!! != 1) return "fail 8"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
operator fun Int.compareTo(c: Char) = 0
|
||||
|
||||
fun foo(x: Int, y: Char): String {
|
||||
if (x < y) {
|
||||
throw Error()
|
||||
}
|
||||
return "${y}K"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return foo(42, 'O')
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
class Test {
|
||||
fun check(a: Any?): String {
|
||||
if (this === a) return "Fail 1"
|
||||
if (!(this !== a)) return "Fail 2"
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String = Test().check("String")
|
||||
@@ -0,0 +1,10 @@
|
||||
fun box(): String {
|
||||
val c1: Char = 0.toChar()
|
||||
val c2 = c1 - 1
|
||||
if (c2 < c1) return "fail: 0.toChar() - 1 should overflow to positive."
|
||||
|
||||
val c3 = c2 + 1
|
||||
if (c3 > c2) return "fail: FFFF.toChar() + 1 should overflow to zero."
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fun box(): String {
|
||||
val i1: Int = Int.MAX_VALUE
|
||||
val i2 = i1 + 1
|
||||
if (i2 > i1) return "fail: Int.MAX_VALUE + 1 should overflow to negative."
|
||||
|
||||
val i3: Int = Int.MIN_VALUE
|
||||
val i4 = i3 - 1
|
||||
if (i4 < i3) return "fail: Int.MIN_VALUE - 1 should overflow to positive."
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
fun box(): String {
|
||||
val a: Long = 2147483647 + 1
|
||||
if (a != -2147483648L) return "fail: in this case we should add to ints and than cast the result to long - overflow expected"
|
||||
|
||||
val l1 = Long.MAX_VALUE
|
||||
val l2 = l1 + 1
|
||||
if (l2 > l1) return "fail: Long.MAX_VALUE + 1 should overflow to negative."
|
||||
|
||||
val l3 = Long.MIN_VALUE
|
||||
val l4 = l3 - 1
|
||||
if (l4 < l3) return "fail: Long.MIN_VALUE - 1 should overflow to positive."
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user