From 9f68e6b8d1b657c3be47e2ac27a4929bf7e5f92d Mon Sep 17 00:00:00 2001 From: Marvin Kaiser Date: Tue, 17 Dec 2019 19:09:09 +0100 Subject: [PATCH] Added test for recursive calls --- makefile | 2 +- src/test/recursive/recursive.c | 28 ++++++++++++++++++++++++++++ src/test/recursive/recursive.h | 1 + src/test/testCode.c | 10 +++++++--- src/test/tests.h | 3 ++- src/test/tests.k | 7 +++++++ 6 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 src/test/recursive/recursive.c create mode 100644 src/test/recursive/recursive.h diff --git a/makefile b/makefile index 58f36df..9f11615 100644 --- a/makefile +++ b/makefile @@ -18,7 +18,7 @@ runTest: ./src/test/test ./src/test/test ./src/test/test: ./src/test/tests.s - gcc -o ./src/test/test ./src/test/tests.s ./src/test/functionCall/functionCall.c ./src/test/testCode.c + gcc -o ./src/test/test ./src/test/tests.s ./src/test/functionCall/functionCall.c ./src/test/recursive/recursive.c ./src/test/testCode.c ./src/test/tests.s: target/klang-1.0-jar-with-dependencies.jar java -cp target/klang-1.0-jar-with-dependencies.jar de.hsrm.compiler.Klang.Klang < ./src/test/tests.k > ./src/test/tests.s diff --git a/src/test/recursive/recursive.c b/src/test/recursive/recursive.c new file mode 100644 index 0000000..db9febc --- /dev/null +++ b/src/test/recursive/recursive.c @@ -0,0 +1,28 @@ +#include +#include "recursive.h" + +void printRecSuccess(char* name, int x, int expected, int result) { + printf("SUCCESS:\t%s(%d)\tGOT: %d\tExpected: %d\n", name, x, result, expected); +} + +void printRecError(char* name, int x, int expected, int result) { + printf("ERROR:\t\t%s(%d)\tGOT: %d\tExpected: %d\n", name, x, result, expected); +} + +int recursiveTest(char* name, int x, int expected, int result) { + if (expected == result) { + printRecSuccess(name, x, expected, result); + return 0; + } else { + printRecError(name, x, expected, result); + return 1; + } +} + +int runRecursiveTests() { + printf("\nRecursive Tests \n"); + int failed = 0; + failed += recursiveTest("fac", 5, 120, fac(5)); + + return failed; +} \ No newline at end of file diff --git a/src/test/recursive/recursive.h b/src/test/recursive/recursive.h new file mode 100644 index 0000000..704036e --- /dev/null +++ b/src/test/recursive/recursive.h @@ -0,0 +1 @@ +int fac(int x); \ No newline at end of file diff --git a/src/test/testCode.c b/src/test/testCode.c index 609306f..282ca5f 100644 --- a/src/test/testCode.c +++ b/src/test/testCode.c @@ -105,14 +105,18 @@ int main(){ failed += testOneArg("id", cId, id, -1); failed += testOneArg("id", cId, id, 15); - // Test for passing arguments to functions + // Tests for passing arguments to functions failed += runFunctionCallTests(); + // Tests for recursive funtions + failed += runRecursiveTests(); + printf("\n=== Failed Tests: %d\n", failed); + if (failed > 0) { return EXIT_FAILURE; + } else { + return EXIT_SUCCESS; } - - return EXIT_SUCCESS; } \ No newline at end of file diff --git a/src/test/tests.h b/src/test/tests.h index 112df7f..0754e0a 100644 --- a/src/test/tests.h +++ b/src/test/tests.h @@ -2,4 +2,5 @@ Alle Test Module */ -int runFunctionCallTests (); \ No newline at end of file +int runFunctionCallTests(); +int runRecursiveTests(); \ No newline at end of file diff --git a/src/test/tests.k b/src/test/tests.k index f23c084..6b82c3a 100644 --- a/src/test/tests.k +++ b/src/test/tests.k @@ -95,4 +95,11 @@ function get10() { return arg10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); } +function fac(x) { + if (x) { + return (x * fac((x - 1))); + } + return 1; +} + add(1, 1);