Some tests for inline members.

This commit is contained in:
Alexander Gorshenev
2017-05-16 13:40:23 +03:00
committed by alexander-gorshenev
parent c6d13abddc
commit 2a246a9a3a
3 changed files with 129 additions and 0 deletions
+15
View File
@@ -1739,6 +1739,21 @@ task deserialized_listof0(type: RunKonanTest) {
source = "serialization/deserialized_listof0.kt"
}
task deserialized_members(type: LinkKonanTest) {
goldValue=
"first level\n"+
"second level\n"+
"third levelxz\n"+
"inner first level\n"+
"inner second level\n"+
"inner third level\n"+
"types first level: 13\n"+
"types second level cha-cha-cha\n"+
"types third level 1\n"
lib = "serialization/serialize_members.kt"
source = "serialization/deserialize_members.kt"
}
// Just check that the driver is able to produce runnable binaries.
task driver0(type: RunDriverKonanTest) {
goldValue = "Hello, world!\n"
@@ -0,0 +1,34 @@
import foo.bar.*
fun main(args: Array<String>) {
val c = C()
val d = C.D()
val e = C.D.E()
c.foo()
d.foo()
e.foo()
val c2 = C2()
val d2 = C2().D2()
val e2 = C2().D2().E2()
c2.foo()
d2.foo()
e2.foo()
val c3 = C3<Int>()
val d3 = C3.D3<String>()
val e3 = C3.D3.E3<Float>()
c3.foo(13)
d3.foo("cha-cha-cha")
e3.foo(1.0f)
// This part doesn't work with file local inline functions.
// So disabled for now.
// val c4 = C4<Int>()
// val d4 = C4<String>().D4<Int>()
// val e4 = C4<Int>().D4<String>().E4<Int>()
// c4.foo(13)
// d4.foo("cawabunga", 17)
// e4.foo(19, "raqa-taqa", 23)
}
@@ -0,0 +1,80 @@
package foo.bar
class R<T> {
inline fun bar(t: T) {
println("just a single class: $t")
}
}
class C {
inline fun foo() {
println("first level")
}
class D {
inline fun foo() {
println("second level")
}
class E {
inline fun foo() {
println("third levelxz")
}
}
}
}
class C2 {
inline fun foo() {
println("inner first level")
}
inner class D2 {
inline fun foo() {
println("inner second level")
}
inner class E2 {
inline fun foo() {
println("inner third level")
}
}
}
}
class C3<X> {
inline fun foo(x: X) {
println("types first level: $x")
}
class D3<X> {
inline fun foo(x: X) {
println("types second level $x")
}
class E3<X> {
inline fun foo(x: X) {
println("types third level $x")
}
}
}
}
class C4<X> {
inline fun foo(x: X) {
println("inner types first level: $x")
}
inner class D4<Y> {
inline fun foo(x: X, y: Y) {
println("inner types second level $x, $y")
}
inner class E4<Z> {
inline fun foo(x: X, y: Y, z: Z) {
println("inner types third level $x, $y, $z")
}
}
}
}