From 3854e3464b36207a445f7b26908f84b1fde2acd2 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Sun, 22 Feb 2026 20:21:06 +0100 Subject: [PATCH] engine: Added setup for tests Added basic tile def --- STYLE.md | 7 +++++++ src/lrts.c | 28 ---------------------------- src/lrts.h | 8 ++++++-- src/p_posix/p_getopt.c | 29 +++++++++++++++++++++++++++++ src/t_tile.c | 1 + src/t_tile.h | 23 +++++++++++++++++++++++ src/test.c | 15 ++++++++++----- src/tests/t_args.c | 5 +++++ src/tests/t_defs.h | 23 +++++++++++++++++++++++ src/u_defs.h | 2 ++ 10 files changed, 106 insertions(+), 35 deletions(-) create mode 100644 src/p_posix/p_getopt.c create mode 100644 src/t_tile.c create mode 100644 src/t_tile.h create mode 100644 src/tests/t_args.c create mode 100644 src/tests/t_defs.h diff --git a/STYLE.md b/STYLE.md index f2ad25c..f952055 100644 --- a/STYLE.md +++ b/STYLE.md @@ -14,6 +14,7 @@ Files and all functions therein are prefixed with one of the following: - `s_`: server side code - `u_`: system utility code - `p_`: platform module directory +- `t_`: test case ## Library functions @@ -34,6 +35,12 @@ Currently supported platforms are: - p_win: win32 specific code - p_r_cli: cli-based renderer - p_r_sdl: sdl-based renderer +- p_tests: platform for running tests It is possible to enable more than one platform at a time e.g. usually p_pc, p_posix and one renderer are enabled to allow the program to compile. + +## Tests + +All test cases are included in the tests directory. +When test are run p_tests is used as a platform. diff --git a/src/lrts.c b/src/lrts.c index 9c49163..eada0d5 100644 --- a/src/lrts.c +++ b/src/lrts.c @@ -24,34 +24,6 @@ void lrts_version(void) { u_fprintf(u_stderr, "%s\n", LRTS_VER); } -void lrts_getopt(int argc, char **argv, struct lrts_config *cfg) { - int c = 0; - while ((c = getopt(argc, argv, LRTS_OPTS LRTS_OPTS_ARG)) != -1) { - switch (c) { - case 'h': - lrts_help(argc, argv); - exit(0); - break; - case 'V': - lrts_version(); - exit(0); - break; - case 'v': - cfg->verbose = 1; - break; - case '?': - break; - default: - u_fprintf(u_stderr, "%s: invalid option '%c'\nTry '%s -h' for more information.\n", - argv[0], c, argv[0]); - exit(-1); - break; - } - } - - cfg->argc = argc - optind; - cfg->argv = argv + optind; -} int lrts_main(int argc, char **argv) { p_io_init(); diff --git a/src/lrts.h b/src/lrts.h index 704d0a1..7fecfc9 100644 --- a/src/lrts.h +++ b/src/lrts.h @@ -25,14 +25,17 @@ #include "p_pc/u_mem.c" #include "p_pc/u_assert.c" #include "p_posix/p_init.c" +#include "p_posix/p_getopt.c" #else #error "No platform is provided" #endif +#ifdef LRTS_RENDERER_TEST +#endif + + #ifdef LRTS_RENDERER_CLI #include "p_r_cli/p_init.c" -#else -#error "No renderer is provided" #endif @@ -40,6 +43,7 @@ #include "u_rand.c" #include "n_conn.c" #include "u_math.c" +#include "t_tile.c" #endif diff --git a/src/p_posix/p_getopt.c b/src/p_posix/p_getopt.c new file mode 100644 index 0000000..b9af175 --- /dev/null +++ b/src/p_posix/p_getopt.c @@ -0,0 +1,29 @@ + +void lrts_getopt(int argc, char **argv, struct lrts_config *cfg) { + int c = 0; + while ((c = getopt(argc, argv, LRTS_OPTS LRTS_OPTS_ARG)) != -1) { + switch (c) { + case 'h': + lrts_help(argc, argv); + exit(0); + break; + case 'V': + lrts_version(); + exit(0); + break; + case 'v': + cfg->verbose = 1; + break; + case '?': + break; + default: + u_fprintf(u_stderr, "%s: invalid option '%c'\nTry '%s -h' for more information.\n", + argv[0], c, argv[0]); + exit(-1); + break; + } + } + + cfg->argc = argc - optind; + cfg->argv = argv + optind; +} diff --git a/src/t_tile.c b/src/t_tile.c new file mode 100644 index 0000000..acf22e3 --- /dev/null +++ b/src/t_tile.c @@ -0,0 +1 @@ +#include "t_tile.h" diff --git a/src/t_tile.h b/src/t_tile.h new file mode 100644 index 0000000..d5424a6 --- /dev/null +++ b/src/t_tile.h @@ -0,0 +1,23 @@ +#ifndef T_TILE_H__ +#define T_TILE_H__ + +#include "u_defs.h" + +enum t_tile_types { + T_TILE_TYPE_NONE = 0 +}; + +enum t_tile_flags { + T_TILE_F_NONE = 0 +}; + +/* + * A tile is the smallest unit of the map. + */ +struct t_tile { + u8 type; + u8 flags; + u8 elevation; +}; + +#endif diff --git a/src/test.c b/src/test.c index 46ee85a..bc6906d 100644 --- a/src/test.c +++ b/src/test.c @@ -1,21 +1,26 @@ #define LRTS_IMPL +#define LRTS_RENDERER_TESTS + #include #include #include "lrts.h" #include "p_platform.h" +#include "tests/t_defs.h" -#define TESTBEGIN(name) { u_fprintf(u_stderr, "%s\n", name); } - -#define TESTEND(name) { u_fprintf(u_stderr, "%s\n", name); } +#ifdef LRTS_IMPL +#include "tests/t_args.c" +#endif int main(int argc, char **argv) { p_io_init(); - TESTBEGIN("lrts test"); + T_TESTBEGIN("lrts test"); lrts_getopt(argc, argv, lrts_cfg()); + + T_TESTCASE("test-argv", t_test_argv); - TESTEND("lrts test"); + T_TESTEND("lrts test"); p_io_finish(); return 0; diff --git a/src/tests/t_args.c b/src/tests/t_args.c new file mode 100644 index 0000000..f3df856 --- /dev/null +++ b/src/tests/t_args.c @@ -0,0 +1,5 @@ +#include "t_defs.h" + +int t_test_argv() { + return lrts_cfg()->argv == LRTS_NULL; +} diff --git a/src/tests/t_defs.h b/src/tests/t_defs.h new file mode 100644 index 0000000..7290a49 --- /dev/null +++ b/src/tests/t_defs.h @@ -0,0 +1,23 @@ +#ifndef T_DEFS_H__ +#define T_DEFS_H__ + + +#define T_TESTBEGIN(name) { u_fprintf(u_stderr, "=== %s ===\n", name); } + +#define T_TESTEND(name) { u_fprintf(u_stderr, "=== %s ===\n", name); } + +/** + * Runs a test case + * Test functions should return 0 when they succeed otherwise 1 + */ +#define T_TESTCASE(name, fn) { \ + T_TESTBEGIN(name); \ + if (fn() == 0) {\ + u_fprintf(u_stderr, "%s OK\n", name); \ + } else {\ + u_fprintf(u_stderr, "%s FAIL\n", name); \ + }\ + T_TESTEND(name); \ +} + +#endif diff --git a/src/u_defs.h b/src/u_defs.h index ee3ae8a..b93981f 100644 --- a/src/u_defs.h +++ b/src/u_defs.h @@ -10,6 +10,8 @@ /* args without value */ #define LRTS_OPTS "hvV" +#define LRTS_NULL 0 + /* args with value */ #define LRTS_OPTS_ARG "c:" #define LRTS_HELP(a, desc) u_fprintf(u_stderr, "\t-%s\t%s\n", (a), desc); -- 2.30.2