backend: add tests for lambda functions
This commit is contained in:
committed by
SvyatoslavScherbina
parent
b5ffc48547
commit
4dec392880
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user