backend: add tests for lambda functions

This commit is contained in:
Svyatoslav Scherbina
2016-12-08 14:06:36 +07:00
committed by SvyatoslavScherbina
parent b5ffc48547
commit 4dec392880
10 changed files with 181 additions and 0 deletions
+46
View File
@@ -693,3 +693,49 @@ task concatenation(type: RunKonanTest) {
goldValue = "Hello world 1 2\nHello, a\nHello, b\n"
source = "codegen/basics/concatenation.kt"
}
task lambda1(type: RunKonanTest) {
goldValue = "lambda\n"
source = "codegen/lambda/lambda1.kt"
}
task lambda2(type: RunKonanTest) {
arguments = ["arg0"]
goldValue = "arg0\n"
source = "codegen/lambda/lambda2.kt"
}
task lambda3(type: RunKonanTest) {
goldValue = "lambda\n"
source = "codegen/lambda/lambda3.kt"
}
task lambda4(type: RunKonanTest) {
goldValue = "1\n2\n3\n3\n4\n"
source = "codegen/lambda/lambda4.kt"
}
task lambda5(type: RunKonanTest) {
goldValue = "42\n"
source = "codegen/lambda/lambda5.kt"
}
task lambda6(type: RunKonanTest) {
goldValue = "42\ncaptured\n"
source = "codegen/lambda/lambda6.kt"
}
task lambda7(type: RunKonanTest) {
goldValue = "43\n"
source = "codegen/lambda/lambda7.kt"
}
task lambda8(type: RunKonanTest) {
goldValue = "first\n0\nsecond\n0\nfirst\n1\nsecond\n1\n"
source = "codegen/lambda/lambda8.kt"
}
task lambda9(type: RunKonanTest) {
goldValue = "0\n0\n1\n0\n0\n1\n1\n1\n"
source = "codegen/lambda/lambda9.kt"
}
@@ -0,0 +1,9 @@
fun main(args : Array<String>) {
run {
println("lambda")
}
}
fun run(f: () -> Unit) {
f()
}
@@ -0,0 +1,9 @@
fun main(args : Array<String>) {
run {
println(args[0])
}
}
fun run(f: () -> Unit) {
f()
}
@@ -0,0 +1,10 @@
fun main(args : Array<String>) {
var str = "lambda"
run {
println(str)
}
}
fun run(f: () -> Unit) {
f()
}
@@ -0,0 +1,28 @@
fun main(args : Array<String>) {
val lambda = bar()
lambda()
lambda()
}
fun bar(): () -> Unit {
var x = Integer(0)
val lambda = {
println(x.toString())
x = x + 1
}
x = x + 1
lambda()
lambda()
println(x.toString())
return lambda
}
class Integer(val value: Int) {
override fun toString() = value.toString()
operator fun plus(other: Int) = Integer(value + other)
}
@@ -0,0 +1,9 @@
fun main(args : Array<String>) {
foo {
println(it)
}
}
fun foo(f: (Int) -> Unit) {
f(42)
}
@@ -0,0 +1,11 @@
fun main(args : Array<String>) {
val str = "captured"
foo {
println(it)
println(str)
}
}
fun foo(f: (Int) -> Unit) {
f(42)
}
@@ -0,0 +1,8 @@
fun main(args : Array<String>) {
val x = foo {
it + 1
}
println(x)
}
fun foo(f: (Int) -> Int) = f(42)
@@ -0,0 +1,24 @@
fun main(args : Array<String>) {
val lambda1 = bar("first")
val lambda2 = bar("second")
lambda1()
lambda2()
lambda1()
lambda2()
}
fun bar(str: String): () -> Unit {
var x = Integer(0)
return {
println(str)
println(x.toString())
x = x + 1
}
}
class Integer(val value: Int) {
override fun toString() = value.toString()
operator fun plus(other: Int) = Integer(value + other)
}
@@ -0,0 +1,27 @@
fun main(args : Array<String>) {
val lambdas = ArrayList<() -> Unit>()
for (i in 0..1) {
var x = Integer(0)
val istr = i.toString()
lambdas.add {
println(istr)
println(x.toString())
x = x + 1
}
}
val lambda1 = lambdas[0]
val lambda2 = lambdas[1]
lambda1()
lambda2()
lambda1()
lambda2()
}
class Integer(val value: Int) {
override fun toString() = value.toString()
operator fun plus(other: Int) = Integer(value + other)
}