QuaternionTests.cpp 2.1 KB

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