From 4dec3928801203628c850c72ce20951a5d520b73 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 8 Dec 2016 14:06:36 +0700 Subject: [PATCH] backend: add tests for lambda functions --- backend.native/tests/build.gradle | 46 +++++++++++++++++++ .../tests/codegen/lambda/lambda1.kt | 9 ++++ .../tests/codegen/lambda/lambda2.kt | 9 ++++ .../tests/codegen/lambda/lambda3.kt | 10 ++++ .../tests/codegen/lambda/lambda4.kt | 28 +++++++++++ .../tests/codegen/lambda/lambda5.kt | 9 ++++ .../tests/codegen/lambda/lambda6.kt | 11 +++++ .../tests/codegen/lambda/lambda7.kt | 8 ++++ .../tests/codegen/lambda/lambda8.kt | 24 ++++++++++ .../tests/codegen/lambda/lambda9.kt | 27 +++++++++++ 10 files changed, 181 insertions(+) create mode 100644 backend.native/tests/codegen/lambda/lambda1.kt create mode 100644 backend.native/tests/codegen/lambda/lambda2.kt create mode 100644 backend.native/tests/codegen/lambda/lambda3.kt create mode 100644 backend.native/tests/codegen/lambda/lambda4.kt create mode 100644 backend.native/tests/codegen/lambda/lambda5.kt create mode 100644 backend.native/tests/codegen/lambda/lambda6.kt create mode 100644 backend.native/tests/codegen/lambda/lambda7.kt create mode 100644 backend.native/tests/codegen/lambda/lambda8.kt create mode 100644 backend.native/tests/codegen/lambda/lambda9.kt diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 2d6874891e0..570fe2b4991 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -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" +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda1.kt b/backend.native/tests/codegen/lambda/lambda1.kt new file mode 100644 index 00000000000..6b83d2fddb4 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda1.kt @@ -0,0 +1,9 @@ +fun main(args : Array) { + run { + println("lambda") + } +} + +fun run(f: () -> Unit) { + f() +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda2.kt b/backend.native/tests/codegen/lambda/lambda2.kt new file mode 100644 index 00000000000..09b560e519a --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda2.kt @@ -0,0 +1,9 @@ +fun main(args : Array) { + run { + println(args[0]) + } +} + +fun run(f: () -> Unit) { + f() +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda3.kt b/backend.native/tests/codegen/lambda/lambda3.kt new file mode 100644 index 00000000000..e9e195f3521 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda3.kt @@ -0,0 +1,10 @@ +fun main(args : Array) { + var str = "lambda" + run { + println(str) + } +} + +fun run(f: () -> Unit) { + f() +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda4.kt b/backend.native/tests/codegen/lambda/lambda4.kt new file mode 100644 index 00000000000..47c633c3f57 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda4.kt @@ -0,0 +1,28 @@ +fun main(args : Array) { + 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) +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda5.kt b/backend.native/tests/codegen/lambda/lambda5.kt new file mode 100644 index 00000000000..83b6f604266 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda5.kt @@ -0,0 +1,9 @@ +fun main(args : Array) { + foo { + println(it) + } +} + +fun foo(f: (Int) -> Unit) { + f(42) +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda6.kt b/backend.native/tests/codegen/lambda/lambda6.kt new file mode 100644 index 00000000000..7517c4f9f60 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda6.kt @@ -0,0 +1,11 @@ +fun main(args : Array) { + val str = "captured" + foo { + println(it) + println(str) + } +} + +fun foo(f: (Int) -> Unit) { + f(42) +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda7.kt b/backend.native/tests/codegen/lambda/lambda7.kt new file mode 100644 index 00000000000..63c9354a1a7 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda7.kt @@ -0,0 +1,8 @@ +fun main(args : Array) { + val x = foo { + it + 1 + } + println(x) +} + +fun foo(f: (Int) -> Int) = f(42) \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda8.kt b/backend.native/tests/codegen/lambda/lambda8.kt new file mode 100644 index 00000000000..1872919ca71 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda8.kt @@ -0,0 +1,24 @@ +fun main(args : Array) { + 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) +} \ No newline at end of file diff --git a/backend.native/tests/codegen/lambda/lambda9.kt b/backend.native/tests/codegen/lambda/lambda9.kt new file mode 100644 index 00000000000..b330c3ee124 --- /dev/null +++ b/backend.native/tests/codegen/lambda/lambda9.kt @@ -0,0 +1,27 @@ +fun main(args : Array) { + 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) +} \ No newline at end of file