// vim:fileencoding=utf-8:foldmethod=marker

#ifndef TESTER_H
#define TESTER_H

#include "../../common/misc/misc_utils.h"
#include "../../common/platform/platform.h"
#include "../../base/strings/str8/str8.h"

#ifdef WP_PLATFORM_CPP
BEGIN_C_LINKAGE

#define wpTesterResult(PASSED) (WpTestFuncResult{wpStr8LitRo(__func__), PASSED, {}})
#else
#define wpTesterResult(PASSED) ((WpTestFuncResult){.name = wpStr8LitRo(__func__), .passed = PASSED})
#endif // !WP_PLATFORM_CPP

#define wpTesterRun(...) _runTests(__VA_ARGS__, NULL)

typedef struct WpTestFuncResult WpTestFuncResult;
struct WpTestFuncResult {
	WpStr8 name;
	b8 passed;

	wpMiscUtilsReservePadding(sizeof(WpStr8) + sizeof(b8));
};

typedef WpTestFuncResult(WpTestFunc)(void);

void _runTests(WpTestFunc *func1, ...);

#ifdef WP_PLATFORM_CPP
END_C_LINKAGE
#endif // !WP_PLATFORM_CPP

#endif // !TESTER_H
