2024-08-01 17:56:38 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
const uint64_t MAX_TESTS = 1024 * 1024;
|
|
|
|
static void (*tests[MAX_TESTS])() = {0};
|
|
|
|
|
|
|
|
const char* add_test(void (*fun)(void)) {
|
|
|
|
for (uint64_t i = 0; i < MAX_TESTS; ++i) {
|
|
|
|
if (tests[i] == 0) {
|
|
|
|
tests[i] = fun;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool run_tests() {
|
|
|
|
for (uint64_t i = 0; i < MAX_TESTS; ++i) {
|
|
|
|
if (tests[i] == 0) break;
|
|
|
|
|
|
|
|
tests[i]();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define CONCAT_IMPL(x, y) x##y
|
|
|
|
#define MACRO_CONCAT(x, y) CONCAT_IMPL(x, y)
|
|
|
|
|
|
|
|
#define TEST_CASE_IMPL(ID, ...) \
|
|
|
|
static void ID(); \
|
|
|
|
static const char* MACRO_CONCAT(test_id_, __COUNTER__) [[maybe_unused]] = \
|
|
|
|
add_test(&ID); \
|
|
|
|
void ID()
|
|
|
|
|
|
|
|
#define TEST_CASE(fun_) TEST_CASE_IMPL(MACRO_CONCAT(fun_, _COUNTER_))
|
|
|
|
|
|
|
|
int main() { return run_tests() ? 0 : 1; }
|