83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
#ifdef WITH_TESTS
|
|
|
|
#include "../Tests.h"
|
|
#include "../../math/Quaternion.h"
|
|
|
|
const float d = 0.00001;
|
|
|
|
TEST(Quaternion, fromEuler) {
|
|
|
|
Quaternion q1 = Quaternion::fromEuler(0,0,0);
|
|
|
|
|
|
}
|
|
|
|
TEST(Quaternion, mul1) {
|
|
|
|
Quaternion q1 = Quaternion::fromEuler(0.5,0,0);
|
|
Quaternion q2 = Quaternion::fromEuler(0.3,0,0);
|
|
Quaternion q3 = q1*q2;
|
|
ASSERT_NEAR(0.8, q3.toEuler().x, d);
|
|
ASSERT_NEAR(0.0, q3.toEuler().y, d);
|
|
ASSERT_NEAR(0.0, q3.toEuler().z, d);
|
|
|
|
}
|
|
|
|
TEST(Quaternion, mul2) {
|
|
|
|
Quaternion q1 = Quaternion::fromEuler(0.5, 0.0, 0.0);
|
|
Quaternion q2 = Quaternion::fromEuler(0.0, 0.3, 0.0);
|
|
Quaternion q3 = Quaternion::fromEuler(0.0, 0.0, 0.2);
|
|
Quaternion q4 = q1*q2*q3;
|
|
ASSERT_NEAR(0.5, q4.toEuler().x, d);
|
|
ASSERT_NEAR(0.3, q4.toEuler().y, d);
|
|
ASSERT_NEAR(0.2, q4.toEuler().z, d);
|
|
|
|
}
|
|
|
|
TEST(Quaternion, toEuler) {
|
|
|
|
|
|
|
|
Quaternion q1 = Quaternion::fromEuler(0,0,0);
|
|
ASSERT_NEAR(0, q1.toEuler().x, d);
|
|
ASSERT_NEAR(0, q1.toEuler().y, d);
|
|
ASSERT_NEAR(0, q1.toEuler().z, d);
|
|
|
|
{
|
|
Quaternion q2 = Quaternion::fromEuler(0.2, 1.0, 1.2);
|
|
ASSERT_NEAR(0.2, q2.toEuler().x, d);
|
|
ASSERT_NEAR(1.0, q2.toEuler().y, d);
|
|
ASSERT_NEAR(1.2, q2.toEuler().z, d);
|
|
}
|
|
|
|
{
|
|
Quaternion q = Quaternion::fromEuler(0.5, 0, 0);
|
|
ASSERT_NEAR(0.5, q.toEuler().x, d);
|
|
ASSERT_NEAR(0.0, q.toEuler().y, d);
|
|
ASSERT_NEAR(0.0, q.toEuler().z, d);
|
|
}{
|
|
Quaternion q = Quaternion::fromEuler(0, 0.5, 0);
|
|
ASSERT_NEAR(0.0, q.toEuler().x, d);
|
|
ASSERT_NEAR(0.5, q.toEuler().y, d);
|
|
ASSERT_NEAR(0.0, q.toEuler().z, d);
|
|
}{
|
|
Quaternion q = Quaternion::fromEuler(0, 0, 0.5);
|
|
ASSERT_NEAR(0.0, q.toEuler().x, d);
|
|
ASSERT_NEAR(0.0, q.toEuler().y, d);
|
|
ASSERT_NEAR(0.5, q.toEuler().z, d);
|
|
}{
|
|
Quaternion q = Quaternion::fromEuler(-0.5, 0, 0.5);
|
|
ASSERT_NEAR(-0.5, q.toEuler().x, d);
|
|
ASSERT_NEAR(0.0, q.toEuler().y, d);
|
|
ASSERT_NEAR(0.5, q.toEuler().z, d);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|