123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #ifndef CORE_TEST_H
- #define CORE_TEST_H
- #include "data/HashMap.h"
- #include "utils/Logger.h"
- namespace Core::Test {
- namespace Internal {
- struct Result {
- int tests = 0;
- int successTests = 0;
- };
- using FileName = ArrayString<256>;
- extern HashMap<FileName, Result> results;
- template<typename T>
- void checkEqual(const char* file, int line, const T& wanted,
- const T& actual) {
- FileName fileName;
- if(fileName.append(file)) {
- CORE_LOG_WARNING("cannot append file name: #", file);
- return;
- }
- Result* result = results.search(fileName);
- if(result == nullptr) {
- result = results.tryEmplace(fileName);
- if(result == nullptr) {
- CORE_LOG_WARNING("cannot add test result for #", file);
- return;
- }
- }
- result->tests++;
- if(wanted == actual) {
- result->successTests++;
- } else {
- CORE_LOG_ERROR("#:# - expected '#' got '#'", fileName, line,
- wanted, actual)
- }
- }
- void checkFloat(const char* file, int line, float wanted, float actual,
- float error);
- }
- void finalize();
- }
- #define CORE_TEST_EQUAL(wanted, actual) \
- Core::Test::Internal::checkEqual<Core::RemoveReference<decltype(actual)>>( \
- __FILE__, __LINE__, wanted, actual);
- #define CORE_TEST_FALSE(actual) CORE_TEST_EQUAL(false, actual);
- #define CORE_TEST_TRUE(actual) CORE_TEST_EQUAL(true, actual);
- #define CORE_TEST_NULL(actual) CORE_TEST_EQUAL(true, actual == nullptr);
- #define CORE_TEST_NOT_NULL(actual) CORE_TEST_EQUAL(true, actual != nullptr);
- #define CORE_TEST_FLOAT(wanted, actual, error) \
- Core::Test::Internal::checkFloat(__FILE__, __LINE__, wanted, actual, error);
- #endif
|