diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2023-03-27 13:07:39 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2023-03-27 13:07:39 +0200 |
commit | 7cccceaf6b15981a3f441f55097dac5fa5395ccc (patch) | |
tree | 873482fae5ec8efdec9094aff827ce4c4804a388 /source/kit_test | |
parent | 108be944da53ddec282b65cb4d90d45cbb1dd84d (diff) | |
download | kit-7cccceaf6b15981a3f441f55097dac5fa5395ccc.zip |
[kit_test] REQUIRE_EQ
Diffstat (limited to 'source/kit_test')
-rw-r--r-- | source/kit_test/test.c | 106 | ||||
-rw-r--r-- | source/kit_test/test.h | 12 |
2 files changed, 84 insertions, 34 deletions
diff --git a/source/kit_test/test.c b/source/kit_test/test.c index 6603d65..7065102 100644 --- a/source/kit_test/test.c +++ b/source/kit_test/test.c @@ -9,14 +9,17 @@ kit_tests_list_t kit_tests_list = { 0 }; -static void report(int i, int line, int ok) { +static void report(int i, int line, long long value, + long long expected) { int const n = kit_tests_list.v[i].assertions++; if (n >= KIT_TEST_ASSERTIONS_LIMIT) return; - kit_tests_list.v[i].line[n] = line; - kit_tests_list.v[i].status[n] = ok; + kit_tests_list.v[i].line[n] = line; + kit_tests_list.v[i].status[n] = value == expected; + kit_tests_list.v[i].value[n] = value; + kit_tests_list.v[i].expected[n] = expected; } static long long ns_to_ms(long long ns) { @@ -250,7 +253,9 @@ int kit_run_tests(int argc, char **argv) { no_color || print_color(light); - if (status != 0) { + if (!quiet && status != 0) { + int have_reports = 0; + for (i = 0; i < kit_tests_list.size && i < KIT_TESTS_SIZE_LIMIT; i++) { if (specific_test != NULL && @@ -263,62 +268,99 @@ int kit_run_tests(int argc, char **argv) { signum < sizeof signames / sizeof *signames && signames[signum] != NULL) { no_color || print_color(light); - quiet || printf("Signal \"%s\" (%d) for \"", - signames[signum], signum); + printf("Signal \"%s\" (%d) for \"", signames[signum], + signum); no_color || print_color(white); - quiet || printf("%s", kit_tests_list.v[i].test_name); + printf("%s", kit_tests_list.v[i].test_name); no_color || print_color(light); - quiet || printf("\" in \""); + printf("\" in \""); no_color || print_color(white); - quiet || - printf("%s", kit_tests_list.v[i].test_file + file_root); + + printf("%s", kit_tests_list.v[i].test_file + file_root); no_color || print_color(light); - quiet || printf("\"!.\n"); + printf("\"!.\n"); } else { no_color || print_color(light); - quiet || printf("Unknown signal (%d) for \"", signum); + printf("Unknown signal (%d) for \"", signum); no_color || print_color(white); - quiet || printf("%s", kit_tests_list.v[i].test_name); + printf("%s", kit_tests_list.v[i].test_name); no_color || print_color(light); - quiet || printf("\" in \""); + printf("\" in \""); no_color || print_color(white); - quiet || - printf("%s", kit_tests_list.v[i].test_file + file_root); + + printf("%s", kit_tests_list.v[i].test_file + file_root); no_color || print_color(light); - quiet || printf("\"!.\n"); + printf("\"!.\n"); } + have_reports = 1; } if (kit_tests_list.v[i].assertions > KIT_TEST_ASSERTIONS_LIMIT) { no_color || print_color(light); - quiet || printf("Too many assertions for \""); + printf("Too many assertions for \""); no_color || print_color(white); - quiet || printf("%s", kit_tests_list.v[i].test_name); + printf("%s", kit_tests_list.v[i].test_name); no_color || print_color(light); - quiet || printf("\" in \""); + printf("\" in \""); no_color || print_color(white); - quiet || - printf("%s", kit_tests_list.v[i].test_file + file_root); + + printf("%s", kit_tests_list.v[i].test_file + file_root); no_color || print_color(light); - quiet || printf("\"!.\n"); - } else + printf("\"!.\n"); + have_reports = 1; + } + } + + have_reports &&printf("\n"); + } + + if (!quiet && status != 0) { + for (i = 0; i < kit_tests_list.size && i < KIT_TESTS_SIZE_LIMIT; + i++) { + if (specific_test != NULL && + strstr(kit_tests_list.v[i].test_name, specific_test) == + NULL) + continue; + + if (kit_tests_list.v[i].assertions <= KIT_TEST_ASSERTIONS_LIMIT) for (j = 0; j < kit_tests_list.v[i].assertions; j++) if (!kit_tests_list.v[i].status[j]) { no_color || print_color(light); - quiet || printf("Assertion on line "); + printf("Assertion on line "); + no_color || print_color(white); + printf("%d", kit_tests_list.v[i].line[j]); + no_color || print_color(light); + printf(" in \""); + no_color || print_color(white); + printf("%s", kit_tests_list.v[i].test_file + file_root); + no_color || print_color(light); + printf("\" failed.\n"); + no_color || print_color(red); + printf(" -> "); + no_color || print_color(light); + printf("Got wrong value"); + no_color || print_color(white); + printf("%10lld", kit_tests_list.v[i].value[j]); + no_color || print_color(light); + printf(" ("); no_color || print_color(white); - quiet || printf("%d", kit_tests_list.v[i].line[j]); + printf("0x%08llx", kit_tests_list.v[i].value[j]); + no_color || print_color(light); + printf(")\n"); + no_color || print_color(green); + printf(" -> "); no_color || print_color(light); - quiet || printf(" in \""); + printf("Expected value "); no_color || print_color(white); - quiet || printf("%s", kit_tests_list.v[i].test_file + - file_root); + printf("%10lld", kit_tests_list.v[i].expected[j]); no_color || print_color(light); - quiet || printf("\" failed.\n"); + printf(" ("); + no_color || print_color(white); + printf("0x%08llx", kit_tests_list.v[i].expected[j]); + no_color || print_color(light); + printf(")\n\n"); } } - - quiet || printf("\n"); } if (kit_tests_list.size > KIT_TESTS_SIZE_LIMIT) { diff --git a/source/kit_test/test.h b/source/kit_test/test.h index 44aae09..8732366 100644 --- a/source/kit_test/test.h +++ b/source/kit_test/test.h @@ -19,7 +19,9 @@ extern "C" { # define KIT_TEST_ASSERTIONS_LIMIT 0x50 #endif -typedef void (*kit_test_report_fn)(int test_index, int line, int ok); +typedef void (*kit_test_report_fn)(int test_index, int line, + long long value, + long long expected); typedef void (*kit_test_run_fn)( int kit_test_index_, kit_test_report_fn kit_test_report_fn_); @@ -30,6 +32,8 @@ typedef struct { int assertions; int line[KIT_TEST_ASSERTIONS_LIMIT]; int status[KIT_TEST_ASSERTIONS_LIMIT]; + long long value[KIT_TEST_ASSERTIONS_LIMIT]; + long long expected[KIT_TEST_ASSERTIONS_LIMIT]; int signal; } kit_test_case_t; @@ -87,13 +91,17 @@ void kit_test_register(char const *name, char const *file, int kit_test_index_, kit_test_report_fn kit_test_report_fn_) #define KIT_REQUIRE(...) \ - kit_test_report_fn_(kit_test_index_, __LINE__, (__VA_ARGS__)) + kit_test_report_fn_(kit_test_index_, __LINE__, (__VA_ARGS__), 1) + +#define KIT_REQUIRE_EQ(...) \ + kit_test_report_fn_(kit_test_index_, __LINE__, __VA_ARGS__) int kit_run_tests(int argc, char **argv); #ifndef KIT_DISABLE_SHORT_NAMES # define TEST KIT_TEST # define REQUIRE KIT_REQUIRE +# define REQUIRE_EQ KIT_REQUIRE_EQ # define test_register kit_test_register # define run_tests kit_run_tests |