From 29deffdce9749aa2e4b99dfa3f542c684a5834fc Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Thu, 24 Oct 2024 13:52:50 +0100 Subject: [PATCH] Implement number evaluation --- lib/evaluator.c | 8 ++++++++ lib/include/evaluator.h | 8 ++++++++ scripts/build.sh | 6 +++++- scripts/test.sh | 1 + tests/evaluator_tests.c | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 lib/evaluator.c create mode 100644 lib/include/evaluator.h create mode 100644 tests/evaluator_tests.c diff --git a/lib/evaluator.c b/lib/evaluator.c new file mode 100644 index 0000000..a40d6cd --- /dev/null +++ b/lib/evaluator.c @@ -0,0 +1,8 @@ +#include "evaluator.h" + +int evaluate(const expression_t *expression) +{ + if (expression->is_number) + return expression->number; + return 0; +} diff --git a/lib/include/evaluator.h b/lib/include/evaluator.h new file mode 100644 index 0000000..e08f9bf --- /dev/null +++ b/lib/include/evaluator.h @@ -0,0 +1,8 @@ +#ifndef EVALUATOR_H +#define EVALUATOR_H + +#include "expression.h" + +int evaluate(const expression_t *expression); + +#endif diff --git a/scripts/build.sh b/scripts/build.sh index 72b388b..83f6da8 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -7,12 +7,16 @@ CFLAGS="$CFLAGS -Ilib/include" mkdir -p build # Build library +clang $CFLAGS -c -o build/evaluator.o lib/evaluator.c clang $CFLAGS -c -o build/memory_pool.o lib/memory_pool.c clang $CFLAGS -c -o build/reader.o lib/reader.c -ar -crs build/lib.a build/memory_pool.o build/reader.o +ar -crs build/lib.a build/evaluator.o build/memory_pool.o build/reader.o # Build tests clang $CFLAGS -Itests -c -o build/testing.o tests/testing.c +clang $CFLAGS -Itests -c -o build/evaluator_tests.o tests/evaluator_tests.c +clang $CFLAGS -o build/evaluator_tests \ + build/evaluator_tests.o build/lib.a build/testing.o clang $CFLAGS -Itests -c -o build/reader_tests.o tests/reader_tests.c clang $CFLAGS -o build/reader_tests \ build/reader_tests.o build/lib.a build/testing.o diff --git a/scripts/test.sh b/scripts/test.sh index 5723764..c631822 100644 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -1,2 +1,3 @@ cd "$(git rev-parse --show-toplevel)" +echo ":: Evaluator tests ::" && build/evaluator_tests echo ":: Reader tests ::" && build/reader_tests diff --git a/tests/evaluator_tests.c b/tests/evaluator_tests.c new file mode 100644 index 0000000..dfc2361 --- /dev/null +++ b/tests/evaluator_tests.c @@ -0,0 +1,33 @@ +#include "evaluator.h" +#include "memory_pool.h" +#include "testing.h" + +static memory_pool_t pool; + +static void number_1234_is_evaluated_as_1234(void) +{ + init_memory_pool(&pool); + expression_t *expression = allocate_expression(&pool); + expression->is_number = true; + expression->number = 1234; + const int result = evaluate(expression); + ASSERT_EQUAL(1234, result); +} + +static void number_4321_is_evaluated_as_4321(void) +{ + init_memory_pool(&pool); + expression_t *expression = allocate_expression(&pool); + expression->is_number = true; + expression->number = 4321; + const int result = evaluate(expression); + ASSERT_EQUAL(4321, result); +} + +int main(void) +{ + TESTING_BEGIN(); + RUN_TEST(number_1234_is_evaluated_as_1234); + RUN_TEST(number_4321_is_evaluated_as_4321); + TESTING_END(); +}