libguf/src/test/test.cpp
2025-03-02 21:41:30 +01:00

64 lines
1.6 KiB
C++

#include <unordered_set>
#include <string>
#include <cstdio>
#include <iostream>
extern "C" {
#include "guf_init.h"
}
#include "test_dbuf.hpp"
#include "test_dict.hpp"
#include "test_utf8.hpp"
std::unordered_set<std::unique_ptr<Test>> g_tests {};
void init_tests()
{
std::unique_ptr<Test> test = std::make_unique<DbufIntTest>("DbufIntTest");
GUF_ASSERT_RELEASE(test.get());
g_tests.insert(std::move(test));
test = std::make_unique<DbufCstringTest>("DbufCstringTest");
GUF_ASSERT_RELEASE(test.get());
g_tests.insert(std::move(test));
test = std::make_unique<DictSvToIntTest>("DictSvToIntTest");
GUF_ASSERT_RELEASE(test.get());
g_tests.insert(std::move(test));
test = std::make_unique<UTF8Test>("UTF8Test");
GUF_ASSERT_RELEASE(test.get());
g_tests.insert(std::move(test));
}
int main()
{
init_tests();
std::cout << "Running " << g_tests.size() << " tests...\n";
size_t num_passed = 0;
for (auto &test : g_tests) {
Test *tst = test.get();
GUF_ASSERT_RELEASE(tst);
tst->before_run();
tst->run();
tst->after_run();
std::cout << "- " << *tst << "\n";
if (tst->passed) {
++num_passed;
}
}
const bool passed_all = (num_passed == g_tests.size());
GUF_ASSERT_RELEASE(num_passed <= g_tests.size());
if (passed_all) {
std::cout << "-> SUCCESS: Passed all (" << num_passed << "/" << g_tests.size() << ") tests.\n";
} else {
std::cout << "-> FAILURE: Failed " << (g_tests.size() - num_passed) << "/" << g_tests.size() << " tests.\n";
}
return passed_all ? EXIT_SUCCESS : EXIT_FAILURE;
}