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
@@ -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)
}