diff options
Diffstat (limited to '02-usart/test_harness')
-rw-r--r-- | 02-usart/test_harness/fake_env.h | 1 | ||||
-rw-r--r-- | 02-usart/test_harness/test_harness.c | 23 | ||||
-rw-r--r-- | 02-usart/test_harness/test_harness.h | 26 |
3 files changed, 26 insertions, 24 deletions
diff --git a/02-usart/test_harness/fake_env.h b/02-usart/test_harness/fake_env.h index 09891bc..3cc6310 100644 --- a/02-usart/test_harness/fake_env.h +++ b/02-usart/test_harness/fake_env.h @@ -10,5 +10,6 @@ void* load_fake_apb2__(); void* load_fake_sram1__(); void* load_fake_sram2__(); void* load_fake_scb__(); +void* load_fake_nvic__(); #endif /* FAKE_ENV_H_ */ diff --git a/02-usart/test_harness/test_harness.c b/02-usart/test_harness/test_harness.c index 9f7dd79..3a6d10a 100644 --- a/02-usart/test_harness/test_harness.c +++ b/02-usart/test_harness/test_harness.c @@ -46,7 +46,6 @@ static int execute_test(test_t* test) int status; int ec; pid_t pid; - const char* note = ""; snprintf( fullname, sizeof(fullname), "%s::%s", iter->test_suite, iter->test_name); @@ -66,17 +65,21 @@ static int execute_test(test_t* test) return 1; } - ec = WEXITSTATUS(status); - switch (ec) { - case 0: - printf("%s " GREEN "[PASS]" RESET "\n", fullname); - return 0; - case 11: - note = " (SIGSEGV)"; - break; + if (WIFEXITED(status)) { + switch ((ec = WEXITSTATUS(status))) { + case 0: + printf("%s " GREEN "[PASS]" RESET "\n", fullname); + return 0; + default: + printf("%s " RED "[FAIL] %d" RESET "\n", fullname, ec); + return ec; + } + } else if (WIFSIGNALED(status)) { + int ec = WTERMSIG(status); + printf("%s " RED "[FAIL] signaled %d" RESET "\n", fullname, ec); + return ec; } - printf("%s " RED "[FAIL] %d%s" RESET "\n", fullname, ec, note); return ec; } } diff --git a/02-usart/test_harness/test_harness.h b/02-usart/test_harness/test_harness.h index 0a218f8..74f3faa 100644 --- a/02-usart/test_harness/test_harness.h +++ b/02-usart/test_harness/test_harness.h @@ -20,20 +20,18 @@ typedef struct { fprintf(stderr, fmt "\n", v1, v2) #define FORMAT_STRING(v1, v2) \ - _Pragma("GCC diagnostic push"); \ - _Pragma("GCC diagnostic ignored \"-Wpointer-to-int-cast\""); \ - _Generic(v1, long: GENPR("%ld == %ld", v1, v2), \ - unsigned long: GENPR("%lu == %lu", v1, v2), \ - int: GENPR("%d == %d", v1, v2), \ - unsigned int: GENPR("%u == %u", v1, v2), \ - short: GENPR("%h == %h", v1, v2), \ - unsigned short: GENPR("%hu == %hu", v1, v2), \ - char: GENPR("%c == %c", v1, v2), \ - double: GENPR("%f == %f", v1, v2), \ - unsigned char: fprintf( \ - stderr, "%02x == %02x\n", (unsigned int) v1, (unsigned int) v2),\ - default: GENPR("%p == %p\n", v1, v2)); \ - _Pragma("GCC diagnostic pop") + fprintf( \ + stderr, \ + _Generic((v1), long: "%ld == %ld\n", \ + unsigned long: "%lu == %lu\n", \ + int: "%d == %d\n", \ + unsigned int: "%u == %u\n", \ + short: "%hu == %hu\n", \ + unsigned short: "%hu == %hu\n", \ + char: "%c == %c\n", \ + double: "%f == %f\n", \ + default: "%p == %p\n"), \ + (v1), (v2)); \ #define TRY_PRINT_TYPE(v1, v2, type, fmt) \ else if (__builtin_types_compatible_p(typeof (v1), type)) { \ |