From e0887dd14918ca42fdcad8022291fd19788c4246 Mon Sep 17 00:00:00 2001 From: neru Date: Thu, 7 May 2026 01:17:51 -0300 Subject: [PATCH] feat: add testrunner and test interface --- src/test/tests.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/test/tests.h diff --git a/src/test/tests.h b/src/test/tests.h new file mode 100644 index 0000000..76bb698 --- /dev/null +++ b/src/test/tests.h @@ -0,0 +1,56 @@ +#pragma once + +#include + +/* + test implementation interface +*/ +class ITest +{ + public: + ITest(); + virtual ~ITest() = default; + + protected: + virtual void run() = 0; + + friend class TestRunner; +}; + +/* + test runner singleton class +*/ +class TestRunner +{ + public: + void runTests() + { + for (auto& test : _tests) + test->run(); + } + + static TestRunner& get() + { + static TestRunner instance; + return instance; + } + + protected: + void registerTest(ITest* test) { _tests.push_back(test); } + friend class ITest; + + private: + TestRunner(); + TestRunner(const TestRunner&) = delete; + TestRunner& operator=(const TestRunner&) = delete; + + std::vector _tests; +}; + +/* + test cctor +*/ +inline ITest::ITest() +{ + TestRunner::get().registerTest(this); +}