/** * @file test.h * * Very basic unit-testing infrastructure. * * WARNING: This is likely to be deprecated at any time to be more * sophisticated! Use at your own risk. */ #ifndef BASE_TEST_H #define BASE_TEST_H /* Debug mode must be on for these tests to work -- so we make sure the * compiler will fail if DEBUG is not enabled. */ #ifdef DEBUG /** * Make a testing assertion. * * (This may eventually be more sophisticated) */ #define TEST_ASSERT(x) \ DEBUG_ASSERT(x) /** * Begin a test suite of a given name. * * After this, declare a lot of void functions that contain assertions. */ #define TEST_SUITE_BEGIN(suite_name) \ namespace suite_name ## _test { /** * End a test suite of a given name, and generate a main. */ #define TEST_SUITE_END(suite_name, functions ...) \ int execute_all_tests() { \ test__void_func tests[] = { functions }; \ for (size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { \ tests[i](); \ } \ fprintf(stderr, "ALL TESTS PASSED!\n"); \ return 0; \ } \ }; \ int main(void) { \ return suite_name ## _test :: execute_all_tests(); \ } typedef void (*test__void_func)(); #endif #endif