Added tests on bridges
This commit is contained in:
@@ -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))
|
||||
}
|
||||
Reference in New Issue
Block a user