// // Created by Patrick Maschek on 14/03/2024. // #ifndef CONST_CONTAINER_TEST_UTIL_H_ #define CONST_CONTAINER_TEST_UTIL_H_ #include #include #include #include "test_ret_val.h" #define TEST(ret_val, ret_code, msg_success, msg_fail) struct TestStruct { int x = 0; char c = 0; const char * s = "This is a string"; constexpr bool operator==(const TestStruct &other) const { return x == other.x && c == other.c && std::string_view(s) == other.s; } }; template requires (std::invocable) consteval auto consteval_caller(F &func, Args... args) { return func(args...); } template constexpr auto run_tests(const char *name, TestFuncs... tests) { constexpr std::size_t num_tests = sizeof...(tests); std::array test_arr = { tests... }; ret_val ret { .name = name }; for (std::size_t i = 0; i < test_arr.size(); ++i) { ret[i] = test_arr[i](); } return ret; }; template void report(const ret_val& ret_val) { std::cout << "-----------------------------------------" << "\n"; std::cout << "Report for test: \"" << ret_val.name << "\"\n"; std::cout << "-----------------------------------------" << "\n"; for (std::size_t i = 0; i < ret_val.size(); ++i) { std::cout << "Result of Test \"" << ret_val[i].test_name << "\" (number: " << i << "): " << (ret_val[i].val == ReturnCode::PASSED ? "PASSED" : "FAILED") << "\n" << "\t" << ret_val[i].msg << "\n"; } } #endif //CONST_CONTAINER_TEST_UTIL_H_