test_manager.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "test_manager.h"
  2. #include <containers/darray.h>
  3. #include <core/logger.h>
  4. #include <core/kstring.h>
  5. #include <core/clock.h>
  6. typedef struct test_entry {
  7. PFN_test func;
  8. char* desc;
  9. } test_entry;
  10. static test_entry* tests;
  11. void test_manager_init(void) {
  12. tests = darray_create(test_entry);
  13. }
  14. void test_manager_register_test(u8 (*PFN_test)(void), char* desc) {
  15. test_entry e;
  16. e.func = PFN_test;
  17. e.desc = desc;
  18. darray_push(tests, e);
  19. }
  20. void test_manager_run_tests(void) {
  21. u32 passed = 0;
  22. u32 failed = 0;
  23. u32 skipped = 0;
  24. u32 count = darray_length(tests);
  25. clock total_time;
  26. clock_start(&total_time);
  27. for (u32 i = 0; i < count; ++i) {
  28. clock test_time;
  29. clock_start(&test_time);
  30. u8 result = tests[i].func();
  31. clock_update(&test_time);
  32. if (result == true) {
  33. ++passed;
  34. } else if (result == BYPASS) {
  35. KWARN("[SKIPPED]: %s", tests[i].desc);
  36. ++skipped;
  37. } else {
  38. KERROR("[FAILED]: %s", tests[i].desc);
  39. ++failed;
  40. }
  41. char status[20];
  42. string_format(status, failed ? "*** %d FAILED ***" : "SUCCESS", failed);
  43. clock_update(&total_time);
  44. KINFO("Executed %d of %d (skipped %d) %s (%.6f sec / %.6f sec total", i + 1, count, skipped, status, test_time.elapsed, total_time.elapsed);
  45. }
  46. clock_stop(&total_time);
  47. KINFO("Results: %d passed, %d failed, %d skipped.", passed, failed, skipped);
  48. }