valeri/test/test.hpp

41 lines
939 B
C++
Raw Normal View History

#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; }