SelfTests: Moved BoundingBox test to a separate project.
This commit is contained in:
parent
a781be5456
commit
75a81cf753
@ -5,72 +5,6 @@
|
||||
#include "Globals.h"
|
||||
#include "BoundingBox.h"
|
||||
#include "Defines.h"
|
||||
#include "SelfTests.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef SELF_TEST
|
||||
|
||||
/** A simple self-test that is executed on program start, used to verify bbox functionality */
|
||||
static class SelfTest_BoundingBox
|
||||
{
|
||||
public:
|
||||
SelfTest_BoundingBox(void)
|
||||
{
|
||||
cSelfTests::Get().Register(cSelfTests::SelfTestFunction(&Test), "Bounding box intersections");
|
||||
}
|
||||
|
||||
static void Test(void)
|
||||
{
|
||||
Vector3d Min(1, 1, 1);
|
||||
Vector3d Max(2, 2, 2);
|
||||
Vector3d LineDefs[] =
|
||||
{
|
||||
Vector3d(1.5, 4, 1.5), Vector3d(1.5, 3, 1.5), // Should intersect at 2, face 1 (YP)
|
||||
Vector3d(1.5, 0, 1.5), Vector3d(1.5, 4, 1.5), // Should intersect at 0.25, face 0 (YM)
|
||||
Vector3d(0, 0, 0), Vector3d(2, 2, 2), // Should intersect at 0.5, face 0, 3 or 5 (anyM)
|
||||
Vector3d(0.999, 0, 1.5), Vector3d(0.999, 4, 1.5), // Should not intersect
|
||||
Vector3d(1.999, 0, 1.5), Vector3d(1.999, 4, 1.5), // Should intersect at 0.25, face 0 (YM)
|
||||
Vector3d(2.001, 0, 1.5), Vector3d(2.001, 4, 1.5), // Should not intersect
|
||||
} ;
|
||||
bool Results[] = {true, true, true, false, true, false};
|
||||
double LineCoeffs[] = {2, 0.25, 0.5, 0, 0.25, 0};
|
||||
|
||||
for (size_t i = 0; i < ARRAYCOUNT(LineDefs) / 2; i++)
|
||||
{
|
||||
double LineCoeff;
|
||||
eBlockFace Face;
|
||||
Vector3d Line1 = LineDefs[2 * i];
|
||||
Vector3d Line2 = LineDefs[2 * i + 1];
|
||||
bool res = cBoundingBox::CalcLineIntersection(Min, Max, Line1, Line2, LineCoeff, Face);
|
||||
if (res != Results[i])
|
||||
{
|
||||
LOGERROR("LineIntersection({%.02f, %.02f, %.02f}, {%.02f, %.02f, %.02f}) -> %d, %.05f, %d",
|
||||
Line1.x, Line1.y, Line1.z,
|
||||
Line2.x, Line2.y, Line2.z,
|
||||
res ? 1 : 0, LineCoeff, Face
|
||||
);
|
||||
abort();
|
||||
}
|
||||
if (res)
|
||||
{
|
||||
if (LineCoeff != LineCoeffs[i])
|
||||
{
|
||||
LOGERROR("LineIntersection({%.02f, %.02f, %.02f}, {%.02f, %.02f, %.02f}) -> %d, %.05f, %d",
|
||||
Line1.x, Line1.y, Line1.z,
|
||||
Line2.x, Line2.y, Line2.z,
|
||||
res ? 1 : 0, LineCoeff, Face
|
||||
);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
} // for i - LineDefs[]
|
||||
}
|
||||
} g_BoundingBoxTest;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
77
tests/BoundingBox/BoundingBoxTest.cpp
Normal file
77
tests/BoundingBox/BoundingBoxTest.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
|
||||
// ByteBufferTest.cpp
|
||||
|
||||
// Implements the main app entrypoint for the cByteBuffer class test
|
||||
|
||||
#include "Globals.h"
|
||||
#include "BoundingBox.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Runs the tests, returns the number of failed tests. */
|
||||
static int Test(void)
|
||||
{
|
||||
int NumFailed = 0;
|
||||
Vector3d Min(1, 1, 1);
|
||||
Vector3d Max(2, 2, 2);
|
||||
Vector3d LineDefs[] =
|
||||
{
|
||||
Vector3d(1.5, 4, 1.5), Vector3d(1.5, 3, 1.5), // Should intersect at 2, face 1 (YP)
|
||||
Vector3d(1.5, 0, 1.5), Vector3d(1.5, 4, 1.5), // Should intersect at 0.25, face 0 (YM)
|
||||
Vector3d(0, 0, 0), Vector3d(2, 2, 2), // Should intersect at 0.5, face 0, 3 or 5 (anyM)
|
||||
Vector3d(0.999, 0, 1.5), Vector3d(0.999, 4, 1.5), // Should not intersect
|
||||
Vector3d(1.999, 0, 1.5), Vector3d(1.999, 4, 1.5), // Should intersect at 0.25, face 0 (YM)
|
||||
Vector3d(2.001, 0, 1.5), Vector3d(2.001, 4, 1.5), // Should not intersect
|
||||
} ;
|
||||
bool Results[] = {true, true, true, false, true, false};
|
||||
double LineCoeffs[] = {2, 0.25, 0.5, 0, 0.25, 0};
|
||||
|
||||
for (size_t i = 0; i < ARRAYCOUNT(LineDefs) / 2; i++)
|
||||
{
|
||||
double LineCoeff;
|
||||
eBlockFace Face;
|
||||
Vector3d Line1 = LineDefs[2 * i];
|
||||
Vector3d Line2 = LineDefs[2 * i + 1];
|
||||
bool res = cBoundingBox::CalcLineIntersection(Min, Max, Line1, Line2, LineCoeff, Face);
|
||||
if (res != Results[i])
|
||||
{
|
||||
LOGERROR("LineIntersection({%.02f, %.02f, %.02f}, {%.02f, %.02f, %.02f}) -> %d, %.05f, %d",
|
||||
Line1.x, Line1.y, Line1.z,
|
||||
Line2.x, Line2.y, Line2.z,
|
||||
res ? 1 : 0, LineCoeff, Face
|
||||
);
|
||||
NumFailed += 1;
|
||||
}
|
||||
if (res)
|
||||
{
|
||||
if (LineCoeff != LineCoeffs[i])
|
||||
{
|
||||
LOGERROR("LineIntersection({%.02f, %.02f, %.02f}, {%.02f, %.02f, %.02f}) -> %d, %.05f, %d",
|
||||
Line1.x, Line1.y, Line1.z,
|
||||
Line2.x, Line2.y, Line2.z,
|
||||
res ? 1 : 0, LineCoeff, Face
|
||||
);
|
||||
NumFailed += 1;
|
||||
}
|
||||
}
|
||||
} // for i - LineDefs[]
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
auto NumFailed = Test();
|
||||
LOG("BoundingBox test finished, number of failed tests: %d", NumFailed);
|
||||
return NumFailed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
47
tests/BoundingBox/CMakeLists.txt
Normal file
47
tests/BoundingBox/CMakeLists.txt
Normal file
@ -0,0 +1,47 @@
|
||||
cmake_minimum_required (VERSION 2.6)
|
||||
|
||||
enable_testing()
|
||||
add_definitions(-DTEST_GLOBALS=1)
|
||||
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/)
|
||||
|
||||
add_definitions(-DTEST_GLOBALS=1)
|
||||
|
||||
set (SHARED_SRCS
|
||||
${CMAKE_SOURCE_DIR}/src/BoundingBox.cpp
|
||||
${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp
|
||||
)
|
||||
|
||||
set (SHARED_HDRS
|
||||
${CMAKE_SOURCE_DIR}/src/BoundingBox.h
|
||||
${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h
|
||||
)
|
||||
|
||||
set (SRCS
|
||||
BoundingBoxTest.cpp
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
# Add the MSVC-specific LeakFinder / StackTracer sources:
|
||||
list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp)
|
||||
list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h)
|
||||
endif()
|
||||
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
add_flags_cxx("-Wno-error=float-equal")
|
||||
endif()
|
||||
|
||||
source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS})
|
||||
source_group("Sources" FILES ${SRCS})
|
||||
add_executable(BoundingBox-exe ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS})
|
||||
add_test(NAME BoundingBox-test COMMAND BoundingBox-exe)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Put the projects into solution folders (MSVC):
|
||||
set_target_properties(
|
||||
BoundingBox-exe
|
||||
PROPERTIES FOLDER Tests
|
||||
)
|
@ -8,6 +8,7 @@ endif()
|
||||
|
||||
# include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
add_subdirectory(BoundingBox)
|
||||
add_subdirectory(ByteBuffer)
|
||||
add_subdirectory(ChunkData)
|
||||
add_subdirectory(CompositeChat)
|
||||
|
Loading…
x
Reference in New Issue
Block a user