From 9a5634f0dae914e6d3070125a3c278a60cca8222 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Fri, 26 Apr 2024 13:27:03 +0900 Subject: [PATCH] Add simple UnitTest that tests AABB_Box collision --- CMakeLists.txt | 27 ++++++++++++++++ src/test.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 src/test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 400c2e0..5d4d782 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,3 +36,30 @@ $,-Og,-fno-delete-null-pointer-checks -fno-strict-overflow -f -Wl,-z,relro -Wl,-z,now -fPIC ) + +add_executable(UnitTest src/test.cpp) +target_link_libraries(UnitTest SC_SeparatingAxisCollisionDetection) +target_include_directories(UnitTest PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") + +target_compile_options(UnitTest PUBLIC +$,-Og,-fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -ftrivial-auto-var-init=zero> +-Wall -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough +-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 +-D_GLIBCXX_ASSERTIONS +-fstrict-flex-arrays=3 +-fstack-clash-protection -fstack-protector-strong +-fPIE +) + +target_link_options(UnitTest PUBLIC +$,-Og,-fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -ftrivial-auto-var-init=zero> +-Wall -Wformat -Wformat=2 -Wconversion -Wimplicit-fallthrough +-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 +-D_GLIBCXX_ASSERTIONS +-fstrict-flex-arrays=3 +-fstack-clash-protection -fstack-protector-strong +-Wl,-z,nodlopen -Wl,-z,noexecstack +-Wl,-z,relro -Wl,-z,now +-fPIE +-pie +) diff --git a/src/test.cpp b/src/test.cpp new file mode 100644 index 0000000..1ddcd28 --- /dev/null +++ b/src/test.cpp @@ -0,0 +1,87 @@ +#include + +static int checks_checked = 0; +static int checks_passed = 0; + +// Macros for unit testing. + +#define CHECK_TRUE(x) \ + do { \ + ++checks_checked; \ + if (!(x)) { \ + std::cout << "CHECK_TRUE at line " << __LINE__ << " failed!\n"; \ + } else { \ + ++checks_passed; \ + } \ + } while (false); +#define CHECK_FALSE(x) \ + do { \ + ++checks_checked; \ + if (x) { \ + std::cout << "CHECK_FALSE at line " << __LINE__ << " failed!\n"; \ + } else { \ + ++checks_passed; \ + } \ + } while (false); + +#include "sd_sacd.h" + +int main() { + // Test 2D AABB. + SC_SACD_AABB_Box a{0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F}; + SC_SACD_AABB_Box b{2.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F}; + + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.x = -2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.x = 0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + b.x = -0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.x = 0.0F; + b.y = 2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + b.y = -2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.y = 0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + b.y = -0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.y = 0.0F; + b.z = 2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.z = -2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.z = 0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.z = -0.5F; + CHECK_TRUE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.z = 0.0F; + b.x = 0.5F; + b.y = 2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.y = -2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.x = -0.5F; + b.y = 2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + b.y = -2.0F; + CHECK_FALSE(SC_SACD_AABB_Box_Collision(&a, &b)); + + std::cout << "Checks checked: " << checks_checked << '\n' + << "Checks passed: " << checks_passed << '\n'; + + return 0; +}