aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-02-19 13:30:45 +0100
committerFelix Morgner <felix.morgner@gmail.com>2026-02-19 13:30:45 +0100
commite6d59a7b506f610b82340b62457f9dd9ad0cb53d (patch)
treeb83affc4789146822a9fdbda88402b87c5f0fa28 /tests
parente34239cf2bdb6bd810826b82c2a66873bd0881e2 (diff)
downloadsnake.s-e6d59a7b506f610b82340b62457f9dd9ad0cb53d.tar.xz
snake.s-e6d59a7b506f610b82340b62457f9dd9ad0cb53d.zip
feat: integrate basic CMocka tests
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt42
-rw-r--r--tests/main.c5
-rw-r--r--tests/snake.c65
-rw-r--r--tests/suites.h6
4 files changed, 118 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..3ed41d4
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,42 @@
+enable_language(C)
+
+set(CMAKE_C_STANDARD 23)
+set(CMAKE_C_STANDARD_REQUIRED YES)
+set(CMAKE_C_EXTENSIONS OFF)
+
+include("FetchContent")
+
+FetchContent_Declare("CMocka"
+ URL "https://gitlab.com/cmocka/cmocka/-/archive/cmocka-2.0.0/cmocka-cmocka-2.0.0.zip"
+ URL_HASH "SHA256=c2a53cc0a45e8be734f657e48daa687f077def759ea30adcd46bdb842a8fb269"
+)
+
+set(BUILD_SHARED_LIBS OFF)
+set(WITH_EXAMPLES OFF)
+
+FetchContent_MakeAvailable("CMocka")
+
+enable_testing()
+
+add_executable("snake.tests"
+ "main.c"
+ "snake.c"
+)
+
+target_compile_features("snake.tests" PUBLIC
+ "c_std_23"
+)
+
+target_compile_options("snake.tests" PUBLIC
+ "-Wall"
+ "-Wextra"
+ "-Werror"
+ "-pedantic-errors"
+)
+
+target_link_libraries("snake.tests" PUBLIC
+ "snake.core"
+ "cmocka"
+)
+
+add_test(NAME "snake.tests" COMMAND "snake.tests") \ No newline at end of file
diff --git a/tests/main.c b/tests/main.c
new file mode 100644
index 0000000..e156b31
--- /dev/null
+++ b/tests/main.c
@@ -0,0 +1,5 @@
+#include "suites.h"
+
+#include <cmocka.h>
+
+int main() { return run_snake_tests(); } \ No newline at end of file
diff --git a/tests/snake.c b/tests/snake.c
new file mode 100644
index 0000000..f4acc7e
--- /dev/null
+++ b/tests/snake.c
@@ -0,0 +1,65 @@
+#include "suites.h"
+
+#include "snake.S"
+
+#include <cmocka.h>
+
+
+
+extern void snake_init(snake_t *self, int x, int y, int length);
+
+static void test_snake_init_sets_x([[maybe_unused]] void **state) {
+ // Arrange:
+ snake_t snake;
+
+ // Act:
+ snake_init(&snake, 1, 2, 3);
+
+ // Assert:
+ assert_int_equal(snake.x, 1);
+}
+
+static void test_snake_init_sets_y([[maybe_unused]] void **state) {
+ // Arrange:
+ snake_t snake;
+
+ // Act:
+ snake_init(&snake, 1, 2, 3);
+
+ // Assert:
+ assert_int_equal(snake.y, 2);
+}
+
+static void test_snake_init_sets_length([[maybe_unused]] void **state) {
+ // Arrange:
+ snake_t snake;
+
+ // Act:
+ snake_init(&snake, 1, 2, 3);
+
+ // Assert:
+ assert_int_equal(snake.length, 3);
+}
+
+static void
+test_snake_init_sets_direction_to_zero([[maybe_unused]] void **state) {
+ // Arrange:
+ snake_t snake;
+
+ // Act:
+ snake_init(&snake, 1, 2, 3);
+
+ // Assert:
+ assert_int_equal(snake.direction, 0);
+}
+
+int run_snake_tests(void) {
+ struct CMUnitTest const tests[] = {
+ cmocka_unit_test(test_snake_init_sets_x),
+ cmocka_unit_test(test_snake_init_sets_y),
+ cmocka_unit_test(test_snake_init_sets_length),
+ cmocka_unit_test(test_snake_init_sets_direction_to_zero),
+ };
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/tests/suites.h b/tests/suites.h
new file mode 100644
index 0000000..ea82ece
--- /dev/null
+++ b/tests/suites.h
@@ -0,0 +1,6 @@
+#ifndef SNAKE_TESTS_SUITES_H
+#define SNAKE_TESTS_SUITES_H
+
+int run_snake_tests();
+
+#endif \ No newline at end of file