adjusted BVH improved 2D/3D BVH new bounding volumes new test cases renamed some test-cases for grouping reasons made GPC header-only using slight adjustments
106 lines
4.1 KiB
C++
Executable File
106 lines
4.1 KiB
C++
Executable File
#ifdef WITH_TESTS
|
|
|
|
#include "../Tests.h"
|
|
|
|
#include "../../geo/Angle.h"
|
|
|
|
TEST(Geo_Angle, dir) {
|
|
|
|
// angle -> pointer -> angle
|
|
ASSERT_NEAR(0, Angle::getRAD_2PI(Angle::getPointer(0)), 0.0001);
|
|
ASSERT_NEAR(1, Angle::getRAD_2PI(Angle::getPointer(1)), 0.0001);
|
|
ASSERT_NEAR(2, Angle::getRAD_2PI(Angle::getPointer(2)), 0.0001);
|
|
ASSERT_NEAR(3, Angle::getRAD_2PI(Angle::getPointer(3)), 0.0001);
|
|
|
|
}
|
|
|
|
TEST(Geo_Angle, safe) {
|
|
|
|
ASSERT_EQ(0, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(0)))));
|
|
ASSERT_EQ(0, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(360)))));
|
|
ASSERT_EQ(85, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(85)))));
|
|
ASSERT_EQ(155, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(155)))));
|
|
ASSERT_EQ(275, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(275)))));
|
|
ASSERT_EQ(355, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(355)))));
|
|
|
|
// negative
|
|
ASSERT_EQ(330, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(-30)))));
|
|
ASSERT_EQ(270, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(-90)))));
|
|
ASSERT_EQ(185, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(-175)))));
|
|
|
|
// too positive
|
|
ASSERT_EQ(30, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(390)))));
|
|
ASSERT_EQ(140, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(500)))));
|
|
ASSERT_EQ(180, (int)std::round(Angle::radToDeg(Angle::makeSafe_2PI(Angle::degToRad(900)))));
|
|
|
|
}
|
|
|
|
TEST(Geo_Angle, calc) {
|
|
|
|
ASSERT_EQ(0, (int)Angle::getDEG_360(0,0, +1,0)); // to the right
|
|
ASSERT_EQ(90, (int)Angle::getDEG_360(0,0, 0,+1)); // upwards
|
|
ASSERT_EQ(180, (int)Angle::getDEG_360(0,0, -1,0)); // to the left
|
|
ASSERT_EQ(270, (int)Angle::getDEG_360(0,0, 0,-1)); // downwards
|
|
|
|
ASSERT_EQ(45, (int)Angle::getDEG_360(0,0, +1,+1)); // to the upper right
|
|
ASSERT_EQ(135, (int)Angle::getDEG_360(0,0, -1,+1)); // to the upper left
|
|
ASSERT_EQ(225, (int)Angle::getDEG_360(0,0, -1,-1)); // to the lower left
|
|
ASSERT_EQ(315, (int)Angle::getDEG_360(0,0, +1,-1)); // to the lower right
|
|
|
|
}
|
|
|
|
TEST(Geo_Angle, signedDiff) {
|
|
|
|
const float d = 0.00001f;
|
|
ASSERT_NEAR(+M_PI/2, Angle::getSignedDiffRAD_2PI(0, M_PI/2), d); // CCW
|
|
ASSERT_NEAR(-M_PI/2, Angle::getSignedDiffRAD_2PI(M_PI/2, 0), d); // CW -> negative
|
|
|
|
ASSERT_NEAR(+M_PI/2, Angle::getSignedDiffRAD_2PI(M_PI/2, M_PI), d); // CCW
|
|
ASSERT_NEAR(-M_PI/2, Angle::getSignedDiffRAD_2PI(M_PI, M_PI/2), d); // CW -> negative
|
|
|
|
ASSERT_NEAR(-M_PI/2, Angle::getSignedDiffRAD_2PI(0, M_PI*1.5), d); // CW -> negative
|
|
|
|
}
|
|
|
|
TEST(Geo_Angle, diff) {
|
|
|
|
const float r = Angle::getRAD_2PI(0,0, +1,0); // to the right
|
|
const float u = Angle::getRAD_2PI(0,0, 0,+1); // upwards
|
|
const float l = Angle::getRAD_2PI(0,0, -1,0); // to the left
|
|
const float d = Angle::getRAD_2PI(0,0, 0,-1); // downwards
|
|
|
|
const float ur = Angle::getRAD_2PI(0,0, +1,+1); // to the upper right
|
|
const float ul = Angle::getRAD_2PI(0,0, -1,+1); // to the upper left
|
|
const float dl = Angle::getRAD_2PI(0,0, -1,-1); // to the lower left
|
|
const float dr = Angle::getRAD_2PI(0,0, +1,-1); // to the lower right
|
|
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(r, u), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(u, r), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(u, l), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(l, u), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(l, d), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(d, l), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(d, r), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(r, d), 0.0001);
|
|
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(ur, ul), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(ul, ur), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(ul, dl), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(dl, ul), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(dl, dr), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(dr, dl), 0.0001);
|
|
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(dr, ur), 0.0001);
|
|
ASSERT_NEAR(M_PI_2, Angle::getDiffRAD_2PI_PI(ur, dr), 0.0001);
|
|
|
|
}
|
|
|
|
#endif
|