QuaternionTests.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "../Tests.hpp"
  2. #include "core/Quaternion.hpp"
  3. #include "core/Test.hpp"
  4. using Q = Core::Quaternion;
  5. using V3 = Core::Vector3;
  6. static void testInit() {
  7. Q q;
  8. TEST_STRING("(0.000 i + 0.000 j + 0.000 k + 1.000)", q);
  9. }
  10. static void testAxisAndDegreesInit() {
  11. Q q(V3(1.0f, 2.0f, 3.0f), Core::degreeToRadian(142.0f));
  12. TEST_STRING("(0.253 i + 0.505 j + 0.758 k + 0.326)", q);
  13. }
  14. static void testLerp() {
  15. Q q1(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(130.0f));
  16. Q q2(V3(1.0f, 2.0f, 4.0f), Core::degreeToRadian(260.0f));
  17. Q q3 = q1.lerp(0.3f, q2);
  18. TEST_STRING("(0.223 i + 0.529 j + 0.810 k + 0.119)", q3);
  19. }
  20. static void testMulSet() {
  21. Q q1(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(50.0f));
  22. Q q2(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(60.0f));
  23. Q q3;
  24. q3 *= q1;
  25. TEST_STRING(q1, q3);
  26. q3 *= q2;
  27. TEST_STRING(Q(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(110.0f)), q3);
  28. }
  29. static void testMul() {
  30. Q q1(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(50.0f));
  31. Q q2(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(60.0f));
  32. Q q3;
  33. q3 = q1 * q2;
  34. TEST_STRING(Q(V3(2.0f, 5.0f, 7.0f), Core::degreeToRadian(110.0f)), q3);
  35. }
  36. static void testMulVector() {
  37. Q q1(V3(1.0f, 0.0f, 0.0f), Core::degreeToRadian(90.0f));
  38. Q q2(V3(0.0f, 1.0f, 0.0f), Core::degreeToRadian(90.0f));
  39. Q q3(V3(0.0f, 0.0f, 1.0f), Core::degreeToRadian(90.0f));
  40. V3 v1(1.0f, 0.0f, 0.0f);
  41. V3 v2(0.0f, 1.0f, 0.0f);
  42. V3 v3(0.0f, 0.0f, 1.0f);
  43. TEST(V3(1.0f, 0.0f, 0.0f), q1 * v1);
  44. TEST(V3(0.0f, 0.0f, 1.0f), q1 * v2);
  45. TEST(V3(0.0f, -1.0f, 0.0f), q1 * v3);
  46. TEST(V3(0.0f, 0.0f, -1.0f), q2 * v1);
  47. TEST(V3(0.0f, 1.0f, 0.0f), q2 * v2);
  48. TEST(V3(1.0f, 0.0f, 0.0f), q2 * v3);
  49. TEST(V3(0.0f, 1.0f, 0.0f), q3 * v1);
  50. TEST(V3(-1.0f, 0.0f, 0.0f), q3 * v2);
  51. TEST(V3(0.0f, 0.0f, 1.0f), q3 * v3);
  52. }
  53. void testQuaternion() {
  54. testInit();
  55. testAxisAndDegreesInit();
  56. testLerp();
  57. testMulSet();
  58. testMul();
  59. testMulVector();
  60. }