diff options
author | sanine <sanine.not@pm.me> | 2021-12-26 11:58:23 -0600 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2021-12-26 11:58:23 -0600 |
commit | ff77a89b252ad79cd005afe361c4b5860c3e7c3a (patch) | |
tree | 3c6ce1c4d63e941bf7d048d30a1c12d479669b10 | |
parent | da39940e9a49016a32ba4f206b63f7045158d54c (diff) |
implement lily_assert_msg
-rw-r--r-- | lily-test.c | 48 | ||||
-rw-r--r-- | lily-test.h | 1 | ||||
-rw-r--r-- | tests/main.c | 2 |
3 files changed, 51 insertions, 0 deletions
diff --git a/lily-test.c b/lily-test.c index a3f30a2..69bd0ce 100644 --- a/lily-test.c +++ b/lily-test.c @@ -1,8 +1,56 @@ +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> #include "lily-test.h" struct lily_globals_t _lily_globals; + +void lily_init() +{ + _lily_globals.error_msg = NULL; + _lily_globals.error_location = ""; +} + + +static void _lily_assert_msg(bool statement, const char *location, + const char *format_string, va_list args) +{ + if (statement) { + va_end(args); + return; // no error, return + } + + _lily_globals.error_location = location; + + va_list args_len; + va_copy(args_len, args); + size_t length = vsnprintf(NULL, 0, format_string, args_len); + va_end(args_len); + + char *msg = realloc(_lily_globals.error_msg, (length+1) * sizeof(char)); + if (msg == NULL) { + fprintf(stderr, "WARNING: failed to allocate memory for failed test message!\n"); + if (_lily_globals.error_msg != NULL) { + free(_lily_globals.error_msg); + _lily_globals.error_msg = NULL; + } + } + else { + vsnprintf(msg, length+1, format_string, args); + _lily_globals.error_msg = msg; + } + + va_end(args); + longjmp(_lily_globals.env, 1); +} + + void lily_assert_msg(bool statement, const char *location, const char *format_string, ...) { + va_list args; + va_start(args, format_string); + // _lily_assert_msg may long jump, so it takes calls va_end(args) for you + _lily_assert_msg(statement, location, format_string, args); } diff --git a/lily-test.h b/lily-test.h index ee37ed5..01eb34a 100644 --- a/lily-test.h +++ b/lily-test.h @@ -23,6 +23,7 @@ struct lily_globals_t { }; extern struct lily_globals_t _lily_globals; +void lily_init(); void lily_assert_msg(bool statement, const char *location, const char *format_string, ...); diff --git a/tests/main.c b/tests/main.c index dbb813c..0ac74ac 100644 --- a/tests/main.c +++ b/tests/main.c @@ -8,6 +8,8 @@ int main() { + lily_init(); + run_test(test_LILY_LOCATION); run_test(test_assert_msg); |