updated ret_val to struct

This commit is contained in:
cyborg1811m 2024-04-08 10:27:10 +02:00
parent ea7f2776a4
commit 984a4ed9ae
3 changed files with 27 additions and 29 deletions

View File

@ -11,24 +11,6 @@
enum ReturnCode { FAILED = -1, PASSED = 0 };
/*struct test_ret_val {
struct ret_val_s : public cc::const_list_node<ret_val_s> {
ReturnCode val = FAILED;
const char *msg = "";
};
cc::const_list<ret_val_s> list;
constexpr test_ret_val() = default;
constexpr test_ret_val(const test_ret_val& other) = delete;
constexpr test_ret_val(test_ret_val&& other) = default;
constexpr test_ret_val& operator=(const test_ret_val& other) = delete;
constexpr test_ret_val& operator=(test_ret_val&& other) = default;
constexpr operator bool() const { return std::all_of(list.cbegin(), list.cend(), [](auto e){ return !static_cast<bool>(e.val); }); }
};*/
struct ret_val_s {
const char *test_name = "";
ReturnCode val = FAILED;
@ -36,6 +18,14 @@ struct ret_val_s {
};
template<std::size_t Nr>
using ret_val = std::array<ret_val_s, Nr>;
struct ret_val {
const char * name;
std::array<ret_val_s, Nr> vals;
[[nodiscard]] constexpr inline std::size_t size() const { return vals.size(); }
constexpr inline ret_val_s& operator[](std::size_t i) { return vals[i]; }
constexpr inline const ret_val_s& operator[](std::size_t i) const { return vals[i]; }
};
#endif //CONST_CONTAINER_TEST_RETURN_VAL_H_

View File

@ -21,18 +21,19 @@ struct TestStruct {
constexpr bool operator==(const TestStruct &other) const { return x == other.x && c == other.c && std::string_view(s) == other.s; }
};
template<std::invocable F>
consteval auto consteval_caller(F &func) {
return func();
template<typename F, typename ...Args>
requires (std::invocable<F, Args...>)
consteval auto consteval_caller(F &func, Args... args) {
return func(args...);
}
template<std::invocable ...TestFuncs>
constexpr auto run_tests(TestFuncs... tests) {
constexpr auto run_tests(const char *name, TestFuncs... tests) {
constexpr std::size_t num_tests = sizeof...(tests);
std::array test_arr = { tests... };
ret_val<num_tests> ret;
ret_val<num_tests> ret { .name = name };
for (std::size_t i = 0; i < test_arr.size(); ++i) {
ret[i] = test_arr[i]();
}
@ -43,6 +44,10 @@ constexpr auto run_tests(TestFuncs... tests) {
template<std::size_t Nr>
void report(const ret_val<Nr>& 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"

View File

@ -3,11 +3,13 @@
#include <const_vector.hpp>
#include "test_util.hpp"
#include "test_ret_val.h"
constexpr auto test_func() {
constexpr auto test_func(const char *name) {
auto ret_val = run_tests([](){
auto ret_val = run_tests(name,
[](){
return TEST_PASS("Test1", "PASS");
});
@ -17,11 +19,12 @@ constexpr auto test_func() {
}
int main() {
auto ret = test_func();
auto ret = test_func("Test 1");
auto cret = consteval_caller();
auto cret = consteval_caller(test_func, "Consteval Test");
report(ret);
report(cret);
return 0;
}