From 152e738e233e945b3449bae3a047d61809262794 Mon Sep 17 00:00:00 2001 From: Konstantin Anisimov Date: Wed, 2 Nov 2016 16:17:04 +0300 Subject: [PATCH] Tests for "while" and "do-while" loop generation --- backend.native/tests/build.gradle | 8 ++++++++ backend.native/tests/codegen/cycles/cycle-test.c | 11 +++++++++++ backend.native/tests/codegen/cycles/cycle.kt | 7 +++++++ backend.native/tests/codegen/cycles/cycle_do-test.c | 11 +++++++++++ backend.native/tests/codegen/cycles/cycle_do.kt | 7 +++++++ 5 files changed, 44 insertions(+) create mode 100644 backend.native/tests/codegen/cycles/cycle-test.c create mode 100644 backend.native/tests/codegen/cycles/cycle.kt create mode 100644 backend.native/tests/codegen/cycles/cycle_do-test.c create mode 100644 backend.native/tests/codegen/cycles/cycle_do.kt diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 22e5d9f2eda..3a740dfe64e 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -142,6 +142,7 @@ task aritmetic(type: UnitKonanTest) { task sum1(type: UnitKonanTest) { source = "codegen/function/sum_foo_bar.kt" + } task sum2(type: UnitKonanTest) { @@ -210,3 +211,10 @@ task minus_eq(type: UnitKonanTest) { source = "codegen/function/minus_eq.kt" } +task cycle(type: UnitKonanTest) { + source = "codegen/cycles/cycle.kt" +} + +task cycle_do(type: UnitKonanTest) { + source = "codegen/cycles/cycle_do.kt" +} diff --git a/backend.native/tests/codegen/cycles/cycle-test.c b/backend.native/tests/codegen/cycles/cycle-test.c new file mode 100644 index 00000000000..80113d74356 --- /dev/null +++ b/backend.native/tests/codegen/cycles/cycle-test.c @@ -0,0 +1,11 @@ +extern void *resolve_symbol(const char*); + +int +run_test() { + int (*cycle)(int) = resolve_symbol("kfun:cycle"); + + if (cycle(1) != 2) return 1; + if (cycle(0) != 1) return 1; + + return 0; +} diff --git a/backend.native/tests/codegen/cycles/cycle.kt b/backend.native/tests/codegen/cycles/cycle.kt new file mode 100644 index 00000000000..cfb85846551 --- /dev/null +++ b/backend.native/tests/codegen/cycles/cycle.kt @@ -0,0 +1,7 @@ +fun cycle(cnt: Int): Int { + var sum = 1 + while (sum == cnt) { + sum = sum + 1 + } + return sum +} diff --git a/backend.native/tests/codegen/cycles/cycle_do-test.c b/backend.native/tests/codegen/cycles/cycle_do-test.c new file mode 100644 index 00000000000..a4c53852edf --- /dev/null +++ b/backend.native/tests/codegen/cycles/cycle_do-test.c @@ -0,0 +1,11 @@ +extern void *resolve_symbol(const char*); + +int +run_test() { + int (*cycle_do)(int) = resolve_symbol("kfun:cycle_do"); + + if (cycle_do(3) != 5) return 1; + if (cycle_do(0) != 3) return 1; + + return 0; +} diff --git a/backend.native/tests/codegen/cycles/cycle_do.kt b/backend.native/tests/codegen/cycles/cycle_do.kt new file mode 100644 index 00000000000..f55f201858a --- /dev/null +++ b/backend.native/tests/codegen/cycles/cycle_do.kt @@ -0,0 +1,7 @@ +fun cycle_do(cnt: Int): Int { + var sum = 1 + do { + sum = sum + 2 + } while (sum == cnt) + return sum +}