From b712a7ac4c6a7a8bb1d81d0adad8f98084b4d2fe Mon Sep 17 00:00:00 2001 From: sanine-a Date: Tue, 21 Dec 2021 11:00:32 -0600 Subject: refactor: move lily-test.h into root directory and move src/ -> tests/ --- CMakeLists.txt | 3 +- lily-test.h | 32 ++++++++++++++++ src/lily-test.h | 32 ---------------- src/test.c | 116 -------------------------------------------------------- tests/test.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 150 insertions(+), 149 deletions(-) create mode 100644 lily-test.h delete mode 100644 src/lily-test.h delete mode 100644 src/test.c create mode 100644 tests/test.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 379417a..c856cb4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,8 @@ project( VERSION 0.1.0 DESCRIPTION "A super-simple single-header C test framework") -add_executable(lily-metatest ${CMAKE_SOURCE_DIR}/src/test.c) +include_directories(${CMAKE_SOURCE_DIR}) +add_executable(lily-metatest ${CMAKE_SOURCE_DIR}/tests/test.c) set_target_properties(lily-metatest PROPERTIES C_STANDARD 99 CMAKE_C_FLAGS "-Wall -Wextra -Werror -Wfatal-errors -Wpedantic") diff --git a/lily-test.h b/lily-test.h new file mode 100644 index 0000000..9f166b1 --- /dev/null +++ b/lily-test.h @@ -0,0 +1,32 @@ +#ifndef LILY_TEST_H +#define LILY_TEST_H + +#define lily_test const char * + +struct lily_test_data_t { + int tests_run; + int tests_failed; +}; + +#define LILY_INIT() \ + struct lily_test_data_t lily_test_data = { 0, 0 }; + + +// helper macros to turn numerical constants into strings +#define STR_IMPL(x) #x +#define STR(X) STR_IMPL(x) + + +// assertion macros +#define lily_indent " " +#define lily_assert_msg(statement, message) \ + do { \ + if (!(statement)) \ + return "" message \ + "\n" lily_indent " [" __FILE__ ":" STR(__LINE__) "]"; \ + } while(0) + +#define lily_assert_equal(a, b) lily_assert_msg((a) == (b), "'" #a "' is not equal to '" #b "'") + + +#endif diff --git a/src/lily-test.h b/src/lily-test.h deleted file mode 100644 index 9f166b1..0000000 --- a/src/lily-test.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef LILY_TEST_H -#define LILY_TEST_H - -#define lily_test const char * - -struct lily_test_data_t { - int tests_run; - int tests_failed; -}; - -#define LILY_INIT() \ - struct lily_test_data_t lily_test_data = { 0, 0 }; - - -// helper macros to turn numerical constants into strings -#define STR_IMPL(x) #x -#define STR(X) STR_IMPL(x) - - -// assertion macros -#define lily_indent " " -#define lily_assert_msg(statement, message) \ - do { \ - if (!(statement)) \ - return "" message \ - "\n" lily_indent " [" __FILE__ ":" STR(__LINE__) "]"; \ - } while(0) - -#define lily_assert_equal(a, b) lily_assert_msg((a) == (b), "'" #a "' is not equal to '" #b "'") - - -#endif diff --git a/src/test.c b/src/test.c deleted file mode 100644 index 85c1ad7..0000000 --- a/src/test.c +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include -#include -#include - -#include "lily-test.h" - -LILY_INIT(); - -void run_test(const char *name, lily_test (*fp)()) -{ - printf("%s... ", name); - const char *result = fp(); - if (result != 0) { - printf("FAILED (%s)\n", result); - } - else - printf("OK\n"); -} - - -lily_test check_init() -{ - // should fail to compile if lily_test_data is undefined - if (lily_test_data.tests_run != 0) - return "tests_run is not equal to zero!"; - if (lily_test_data.tests_failed != 0) - return "tests_failed is not equal to zero!"; - return 0; -} - - -int get_message(char **destination, const char *source) -{ - const char *s = source; - size_t size = 0; - while (*s != '\n') { - if (*s == 0) - return false; - s++; - size++; - } - - *destination = malloc((size+1) * sizeof(char)); - strncpy(*destination, source, size); - (*destination)[size] = 0; - return true; -} - -#define assert_msg "message" - -lily_test wrap_assert(bool statement) -{ - lily_assert_msg(statement, assert_msg); - return 0; -} - -lily_test check_assert() -{ - if (wrap_assert(true) != 0) - return "true assertion did not return 0!"; - - const char *result = wrap_assert(false); - - if (result == 0) - return "false assertion returned zero!"; - - char *message; - if (!get_message(&message, result)) - return "false assertion contained malformed message!"; - - if (strcmp(message, assert_msg) != 0) - return "false assertion message was not '" assert_msg "'!"; - free(message); - - return 0; -} - - -const char *assert_eq_true() -{ - lily_assert_equal(15, 15); - return 0; -} -const char *assert_eq_false() -{ - lily_assert_equal(14, 15); - return 0; -} - -lily_test check_other_asserts() -{ - if (assert_eq_true() != 0) - return "equality assertion returned non-zero when true!"; - const char *result = assert_eq_false(); - if (result == 0) - return "equality assertion returned zero when false!"; - char *message; - if (!get_message(&message, result)) - return "false equality assertion returned malformed message!"; - if (strcmp(message, "'14' is not equal to '15'") != 0) - return "false equality assertion returned incorrect message!"; - - return 0; -} - - -int main() -{ - run_test("check LILY_INIT()", check_init); - run_test("check basic assertion", check_assert); - run_test("check other asserts", check_other_asserts); - - printf("all tests finished.\n"); - return 0; -} diff --git a/tests/test.c b/tests/test.c new file mode 100644 index 0000000..85c1ad7 --- /dev/null +++ b/tests/test.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include + +#include "lily-test.h" + +LILY_INIT(); + +void run_test(const char *name, lily_test (*fp)()) +{ + printf("%s... ", name); + const char *result = fp(); + if (result != 0) { + printf("FAILED (%s)\n", result); + } + else + printf("OK\n"); +} + + +lily_test check_init() +{ + // should fail to compile if lily_test_data is undefined + if (lily_test_data.tests_run != 0) + return "tests_run is not equal to zero!"; + if (lily_test_data.tests_failed != 0) + return "tests_failed is not equal to zero!"; + return 0; +} + + +int get_message(char **destination, const char *source) +{ + const char *s = source; + size_t size = 0; + while (*s != '\n') { + if (*s == 0) + return false; + s++; + size++; + } + + *destination = malloc((size+1) * sizeof(char)); + strncpy(*destination, source, size); + (*destination)[size] = 0; + return true; +} + +#define assert_msg "message" + +lily_test wrap_assert(bool statement) +{ + lily_assert_msg(statement, assert_msg); + return 0; +} + +lily_test check_assert() +{ + if (wrap_assert(true) != 0) + return "true assertion did not return 0!"; + + const char *result = wrap_assert(false); + + if (result == 0) + return "false assertion returned zero!"; + + char *message; + if (!get_message(&message, result)) + return "false assertion contained malformed message!"; + + if (strcmp(message, assert_msg) != 0) + return "false assertion message was not '" assert_msg "'!"; + free(message); + + return 0; +} + + +const char *assert_eq_true() +{ + lily_assert_equal(15, 15); + return 0; +} +const char *assert_eq_false() +{ + lily_assert_equal(14, 15); + return 0; +} + +lily_test check_other_asserts() +{ + if (assert_eq_true() != 0) + return "equality assertion returned non-zero when true!"; + const char *result = assert_eq_false(); + if (result == 0) + return "equality assertion returned zero when false!"; + char *message; + if (!get_message(&message, result)) + return "false equality assertion returned malformed message!"; + if (strcmp(message, "'14' is not equal to '15'") != 0) + return "false equality assertion returned incorrect message!"; + + return 0; +} + + +int main() +{ + run_test("check LILY_INIT()", check_init); + run_test("check basic assertion", check_assert); + run_test("check other asserts", check_other_asserts); + + printf("all tests finished.\n"); + return 0; +} -- cgit v1.2.1