#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