#ifndef CORE_TEST_H #define CORE_TEST_H #include "core/Types.h" void coreFinalizeTests(void); #define CORE_TEST_ARGS const char *file, int line #define CORE_TEST_FUNCTION(name, type) \ bool coreTest##name(CORE_TEST_ARGS, type wanted, type actual) CORE_TEST_FUNCTION(Int, int); CORE_TEST_FUNCTION(I64, i64); CORE_TEST_FUNCTION(U64, u64); CORE_TEST_FUNCTION(Size, size_t); CORE_TEST_FUNCTION(Bool, bool); CORE_TEST_FUNCTION(String, const char*); bool coreTestFloat(CORE_TEST_ARGS, float wanted, float actual, float error); bool coreTestNull(CORE_TEST_ARGS, const void* p); bool coreTestNotNull(CORE_TEST_ARGS, const void* p); #define CORE_TEST(wanted, actual, name) \ coreTest##name(__FILE__, __LINE__, wanted, actual) #define CORE_TEST_FLOAT(wanted, actual, error) \ coreTestFloat(__FILE__, __LINE__, wanted, actual, error) #define CORE_TEST_BOOL(wanted, actual) CORE_TEST(wanted, actual, Bool) #define CORE_TEST_INT(wanted, actual) CORE_TEST(wanted, actual, Int) #define CORE_TEST_I64(wanted, actual) CORE_TEST(wanted, actual, I64) #define CORE_TEST_U64(wanted, actual) CORE_TEST(wanted, actual, U64) #define CORE_TEST_SIZE(wanted, actual) CORE_TEST(wanted, actual, Size) #define CORE_TEST_STRING(wanted, actual) CORE_TEST(wanted, actual, String) #define CORE_TEST_FALSE(actual) CORE_TEST(false, actual, Bool) #define CORE_TEST_TRUE(actual) CORE_TEST(true, actual, Bool) #define CORE_TEST_NULL(actual) coreTestNull(__FILE__, __LINE__, actual) #define CORE_TEST_NOT_NULL(actual) coreTestNotNull(__FILE__, __LINE__, actual) bool coreTestVectorN(CORE_TEST_ARGS, const float* wanted, const float* actual, size_t n); #define CORE_TEST_VN(wanted, actual, n) \ coreTestVectorN(__FILE__, __LINE__, (wanted)->data, (actual)->data, n) #define CORE_TEST_V2(wanted, actual) \ CORE_TEST_VN((CoreVector2*)(wanted), (CoreVector2*)(actual), 2) #define CORE_TEST_V3(wanted, actual) \ CORE_TEST_VN((CoreVector3*)(wanted), (CoreVector3*)(actual), 3) #define CORE_TEST_V4(wanted, actual) \ CORE_TEST_VN((CoreVector4*)(wanted), (CoreVector4*)(actual), 4) bool coreTestIntVectorN(CORE_TEST_ARGS, const int* wanted, const int* actual, size_t n); #define CORE_TEST_IVN(wanted, actual, n) \ coreTestIntVectorN(__FILE__, __LINE__, (wanted)->data, (actual)->data, n) #define CORE_TEST_IV2(wanted, actual) \ CORE_TEST_IVN((CoreIntVector2*)(wanted), (CoreIntVector2*)(actual), 2) #define CORE_TEST_IV3(wanted, actual) \ CORE_TEST_IVN((CoreIntVector3*)(wanted), (CoreIntVector3*)(actual), 3) #define CORE_TEST_IV4(wanted, actual) \ CORE_TEST_IVN((CoreIntVector4*)(wanted), (CoreIntVector4*)(actual), 4) #endif