diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 42 | ||||
| -rw-r--r-- | tests/main.c | 5 | ||||
| -rw-r--r-- | tests/snake.c | 65 | ||||
| -rw-r--r-- | tests/suites.h | 6 |
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 |
