Added tests on bridges

This commit is contained in:
Igor Chevdar
2017-02-21 17:14:13 +03:00
parent 7fa44ebc0d
commit 4835aa3e74
4 changed files with 118 additions and 0 deletions
+19
View File
@@ -89,6 +89,10 @@ task slackReport(type:Reporter) {
reportHome = rootProject.file("test.output").absoluteFile
}
task bridges_all() {
dependsOn(tasks.withType(KonanTest).matching { !(it instanceof RunExternalTestGroup) && it.enabled && it.name.startsWith("bridges_") })
}
task sum (type:RunKonanTest) {
source = "codegen/function/sum.kt"
}
@@ -537,6 +541,21 @@ task bridges_test13(type: RunKonanTest) {
source = "codegen/bridges/test13.kt"
}
task bridges_test14(type: RunKonanTest) {
goldValue = "42\n56\n42\n56\n56\n42\n156\n142\n"
source = "codegen/bridges/test14.kt"
}
task bridges_test15(type: RunKonanTest) {
goldValue = "OK\n"
source = "codegen/bridges/test15.kt"
}
task bridges_test16(type: RunKonanTest) {
goldValue = "OK\nOK\n"
source = "codegen/bridges/test16.kt"
}
task array0(type: RunKonanTest) {
goldValue = "5\n6\n7\n8\n9\n10\n11\n12\n13\n"
source = "runtime/collections/array0.kt"
@@ -0,0 +1,44 @@
open class A<T, U> {
open fun foo(x: T, y: U) {
println(x.toString())
println(y.toString())
}
}
interface I1<T> {
fun foo(x: Int, y: T)
}
interface I2<T> {
fun foo(x: T, y: Int)
}
class B : A<Int, Int>(), I1<Int>, I2<Int> {
var z: Int = 5
var q: Int = 7
override fun foo(x: Int, y: Int) {
z = x
q = y
}
}
fun zzz(a: A<Int, Int>) {
a.foo(42, 56)
}
fun main(args: Array<String>) {
val b = B()
zzz(b)
val a = A<Int, Int>()
zzz(a)
println(b.z)
println(b.q)
val i1: I1<Int> = b
i1.foo(56, 42)
println(b.z)
println(b.q)
val i2: I2<Int> = b
i2.foo(156, 142)
println(b.z)
println(b.q)
}
@@ -0,0 +1,35 @@
// non-generic interface, generic impl, vtable call + interface call
open class A<T> {
open var size: T = 56 as T
}
interface C {
var size: Int
}
open class B : C, A<Int>()
open class D: B() {
override var size: Int = 117
}
fun <T> foo(a: A<T>) {
a.size = 42 as T
}
fun box(): String {
val b = B()
foo(b)
if (b.size != 42) return "fail 1"
val d = D()
if (d.size != 117) return "fail 2"
foo(d)
if (d.size != 42) return "fail 3"
return "OK"
}
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,20 @@
interface A {
fun foo(): String
}
abstract class C: A
open class B: C() {
override fun foo(): String {
return "OK"
}
}
fun bar(c: C) = c.foo()
fun main(args: Array<String>) {
val b = B()
val c: C = b
println(bar(b))
println(bar(c))
}