mathMatrixTest.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #include "testing/unitTesting.h"
  2. #include "platform/platform.h"
  3. #include "console/simBase.h"
  4. #include "console/consoleTypes.h"
  5. #include "console/scriptObjects.h"
  6. #include "console/simBase.h"
  7. #include "console/engineAPI.h"
  8. #include "math/mMath.h"
  9. TEST(MatrixTest, TestIdentityInit)
  10. {
  11. MatrixF test(true);
  12. EXPECT_NEAR(test(0, 0), 1.0f, 0.001f);
  13. EXPECT_NEAR(test(1, 1), 1.0f, 0.001f);
  14. EXPECT_NEAR(test(2, 2), 1.0f, 0.001f);
  15. EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  16. }
  17. TEST(MatrixTest, TestIdentitySet)
  18. {
  19. MatrixF test(false);
  20. test.identity();
  21. EXPECT_NEAR(test(0, 0), 1.0f, 0.001f);
  22. EXPECT_NEAR(test(1, 1), 1.0f, 0.001f);
  23. EXPECT_NEAR(test(2, 2), 1.0f, 0.001f);
  24. EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  25. }
  26. TEST(MatrixTest, TestIsIdentity)
  27. {
  28. MatrixF test(true);
  29. EXPECT_TRUE(test.isIdentity());
  30. }
  31. TEST(MatrixTest, TestEulerInit)
  32. {
  33. MatrixF test(EulerF(1.0f, 0.0f, 1.0f));
  34. EXPECT_NEAR(test(0, 0), 0.5403f, 0.001f); EXPECT_NEAR(test(0, 1), 0.8415f, 0.001f); EXPECT_NEAR(test(0, 2), 0.0f, 0.001f); EXPECT_NEAR(test(0, 3), 0.0f, 0.001f);
  35. EXPECT_NEAR(test(1, 0), -0.4546f, 0.001f); EXPECT_NEAR(test(1, 1), 0.2919f, 0.001f); EXPECT_NEAR(test(1, 2), 0.8415f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  36. EXPECT_NEAR(test(2, 0), 0.7081f, 0.001f); EXPECT_NEAR(test(2, 1), -0.4546f, 0.001f); EXPECT_NEAR(test(2, 2), 0.5403f, 0.001f); EXPECT_NEAR(test(2, 3), 0.0f, 0.001f);
  37. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  38. }
  39. TEST(MatrixTest, TestEulerSet)
  40. {
  41. MatrixF test(true);
  42. test.set(EulerF(1.0f, 0.0f, 1.0f));
  43. EXPECT_NEAR(test(0, 0), 0.5403f, 0.001f); EXPECT_NEAR(test(0, 1), 0.8415f, 0.001f); EXPECT_NEAR(test(0, 2), 0.0f, 0.001f); EXPECT_NEAR(test(0, 3), 0.0f, 0.001f);
  44. EXPECT_NEAR(test(1, 0), -0.4546f, 0.001f); EXPECT_NEAR(test(1, 1), 0.2919f, 0.001f); EXPECT_NEAR(test(1, 2), 0.8415f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  45. EXPECT_NEAR(test(2, 0), 0.7081f, 0.001f); EXPECT_NEAR(test(2, 1), -0.4546f, 0.001f); EXPECT_NEAR(test(2, 2), 0.5403f, 0.001f); EXPECT_NEAR(test(2, 3), 0.0f, 0.001f);
  46. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  47. }
  48. TEST(MatrixTest, TestEulerPointInit)
  49. {
  50. MatrixF test(EulerF(1.0f, 0.0f, 1.0f), Point3F(5.0f, 0.0f, 1.0f));
  51. EXPECT_NEAR(test(0, 0), 0.5403f, 0.001f); EXPECT_NEAR(test(0, 1), 0.8415f, 0.001f); EXPECT_NEAR(test(0, 2), 0.0f, 0.001f); EXPECT_NEAR(test(0, 3), 5.0f, 0.001f);
  52. EXPECT_NEAR(test(1, 0), -0.4546f, 0.001f); EXPECT_NEAR(test(1, 1), 0.2919f, 0.001f); EXPECT_NEAR(test(1, 2), 0.8415f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  53. EXPECT_NEAR(test(2, 0), 0.7081f, 0.001f); EXPECT_NEAR(test(2, 1), -0.4546f, 0.001f); EXPECT_NEAR(test(2, 2), 0.5403f, 0.001f); EXPECT_NEAR(test(2, 3), 1.0f, 0.001f);
  54. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  55. }
  56. TEST(MatrixTest, TestEulerPointSet)
  57. {
  58. MatrixF test(true);
  59. test.set(EulerF(1.0f, 0.0f, 1.0f), Point3F(5.0f, 0.0f, 1.0f));
  60. EXPECT_NEAR(test(0, 0), 0.5403f, 0.001f); EXPECT_NEAR(test(0, 1), 0.8415f, 0.001f); EXPECT_NEAR(test(0, 2), 0.0f, 0.001f); EXPECT_NEAR(test(0, 3), 5.0f, 0.001f);
  61. EXPECT_NEAR(test(1, 0), -0.4546f, 0.001f); EXPECT_NEAR(test(1, 1), 0.2919f, 0.001f); EXPECT_NEAR(test(1, 2), 0.8415f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  62. EXPECT_NEAR(test(2, 0), 0.7081f, 0.001f); EXPECT_NEAR(test(2, 1), -0.4546f, 0.001f); EXPECT_NEAR(test(2, 2), 0.5403f, 0.001f); EXPECT_NEAR(test(2, 3), 1.0f, 0.001f);
  63. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  64. }
  65. TEST(MatrixTest, TestSetCrossProduct)
  66. {
  67. MatrixF test(true);
  68. test.setCrossProduct(Point3F(5.0f, 0.0f, 1.0f));
  69. EXPECT_NEAR(test(0, 0), 0.0f, 0.001f); EXPECT_NEAR(test(0, 1), -1.0f, 0.001f); EXPECT_NEAR(test(0, 2), 0.0f, 0.001f); EXPECT_NEAR(test(0, 3), 0.0f, 0.001f);
  70. EXPECT_NEAR(test(1, 0), 1.0f, 0.001f); EXPECT_NEAR(test(1, 1), 0.0, 0.001f); EXPECT_NEAR(test(1, 2), -5.0f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  71. EXPECT_NEAR(test(2, 0), 0.0f, 0.001f); EXPECT_NEAR(test(2, 1), 5.0f, 0.001f); EXPECT_NEAR(test(2, 2), 0.0f, 0.001f); EXPECT_NEAR(test(2, 3), 0.0f, 0.001f);
  72. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  73. }
  74. TEST(MatrixTest, TestSetTensorProduct)
  75. {
  76. MatrixF test(true);
  77. test.setTensorProduct(Point3F(5.0f, 2.0f, 1.0f), Point3F(5.0f, 2.0f, 1.0f));
  78. EXPECT_NEAR(test(0, 0), 25.0f, 0.001f); EXPECT_NEAR(test(0, 1), 10.0f, 0.001f); EXPECT_NEAR(test(0, 2), 5.0f, 0.001f); EXPECT_NEAR(test(0, 3), 0.0f, 0.001f);
  79. EXPECT_NEAR(test(1, 0), 10.0f, 0.001f); EXPECT_NEAR(test(1, 1), 4.0, 0.001f); EXPECT_NEAR(test(1, 2), 2.0f, 0.001f); EXPECT_NEAR(test(1, 3), 0.0f, 0.001f);
  80. EXPECT_NEAR(test(2, 0), 5.0f, 0.001f); EXPECT_NEAR(test(2, 1), 2.0f, 0.001f); EXPECT_NEAR(test(2, 2), 1.0f, 0.001f); EXPECT_NEAR(test(2, 3), 0.0f, 0.001f);
  81. EXPECT_NEAR(test(3, 0), 0.0f, 0.001f); EXPECT_NEAR(test(3, 1), 0.0f, 0.001f); EXPECT_NEAR(test(3, 2), 0.0f, 0.001f); EXPECT_NEAR(test(3, 3), 1.0f, 0.001f);
  82. }
  83. TEST(MatrixTest, TestMulFunction)
  84. {
  85. MatrixF test(true);
  86. test(0, 0) = 1.0f; test(0, 1) = 2.0f; test(0, 2) = 3.0f; test(0, 3) = 4.0f;
  87. test(1, 0) = 4.0f; test(1, 1) = 1.0f; test(1, 2) = 2.0f; test(1, 3) = 3.0f;
  88. test(2, 0) = 3.0f; test(2, 1) = 4.0f; test(2, 2) = 1.0f; test(2, 3) = 2.0f;
  89. test(3, 0) = 2.0f; test(3, 1) = 3.0f; test(3, 2) = 4.0f; test(3, 3) = 1.0f;
  90. MatrixF test2(true);
  91. test2(0, 0) = 4.0f; test2(0, 1) = 3.0f; test2(0, 2) = 2.0f; test2(0, 3) = 1.0f;
  92. test2(1, 0) = 1.0f; test2(1, 1) = 4.0f; test2(1, 2) = 3.0f; test2(1, 3) = 2.0f;
  93. test2(2, 0) = 2.0f; test2(2, 1) = 1.0f; test2(2, 2) = 4.0f; test2(2, 3) = 3.0f;
  94. test2(3, 0) = 3.0f; test2(3, 1) = 2.0f; test2(3, 2) = 1.0f; test2(3, 3) = 4.0f;
  95. test.mul(test2);
  96. EXPECT_NEAR(test(0, 0), 24.0f, 0.001f); EXPECT_NEAR(test(0, 1), 22.0f, 0.001f); EXPECT_NEAR(test(0, 2), 24.0f, 0.001f); EXPECT_NEAR(test(0, 3), 30.0f, 0.001f);
  97. EXPECT_NEAR(test(1, 0), 30.0f, 0.001f); EXPECT_NEAR(test(1, 1), 24.0f, 0.001f); EXPECT_NEAR(test(1, 2), 22.0f, 0.001f); EXPECT_NEAR(test(1, 3), 24.0f, 0.001f);
  98. EXPECT_NEAR(test(2, 0), 24.0f, 0.001f); EXPECT_NEAR(test(2, 1), 30.0f, 0.001f); EXPECT_NEAR(test(2, 2), 24.0f, 0.001f); EXPECT_NEAR(test(2, 3), 22.0f, 0.001f);
  99. EXPECT_NEAR(test(3, 0), 22.0f, 0.001f); EXPECT_NEAR(test(3, 1), 24.0f, 0.001f); EXPECT_NEAR(test(3, 2), 30.0f, 0.001f); EXPECT_NEAR(test(3, 3), 24.0f, 0.001f);
  100. }
  101. TEST(MatrixTest, TestMulOperator)
  102. {
  103. MatrixF test(true);
  104. test(0, 0) = 1.0f; test(0, 1) = 2.0f; test(0, 2) = 3.0f; test(0, 3) = 4.0f;
  105. test(1, 0) = 4.0f; test(1, 1) = 1.0f; test(1, 2) = 2.0f; test(1, 3) = 3.0f;
  106. test(2, 0) = 3.0f; test(2, 1) = 4.0f; test(2, 2) = 1.0f; test(2, 3) = 2.0f;
  107. test(3, 0) = 2.0f; test(3, 1) = 3.0f; test(3, 2) = 4.0f; test(3, 3) = 1.0f;
  108. MatrixF test2(true);
  109. test2(0, 0) = 4.0f; test2(0, 1) = 3.0f; test2(0, 2) = 2.0f; test2(0, 3) = 1.0f;
  110. test2(1, 0) = 1.0f; test2(1, 1) = 4.0f; test2(1, 2) = 3.0f; test2(1, 3) = 2.0f;
  111. test2(2, 0) = 2.0f; test2(2, 1) = 1.0f; test2(2, 2) = 4.0f; test2(2, 3) = 3.0f;
  112. test2(3, 0) = 3.0f; test2(3, 1) = 2.0f; test2(3, 2) = 1.0f; test2(3, 3) = 4.0f;
  113. test = test * test2;
  114. EXPECT_NEAR(test(0, 0), 24.0f, 0.001f); EXPECT_NEAR(test(0, 1), 22.0f, 0.001f); EXPECT_NEAR(test(0, 2), 24.0f, 0.001f); EXPECT_NEAR(test(0, 3), 30.0f, 0.001f);
  115. EXPECT_NEAR(test(1, 0), 30.0f, 0.001f); EXPECT_NEAR(test(1, 1), 24.0f, 0.001f); EXPECT_NEAR(test(1, 2), 22.0f, 0.001f); EXPECT_NEAR(test(1, 3), 24.0f, 0.001f);
  116. EXPECT_NEAR(test(2, 0), 24.0f, 0.001f); EXPECT_NEAR(test(2, 1), 30.0f, 0.001f); EXPECT_NEAR(test(2, 2), 24.0f, 0.001f); EXPECT_NEAR(test(2, 3), 22.0f, 0.001f);
  117. EXPECT_NEAR(test(3, 0), 22.0f, 0.001f); EXPECT_NEAR(test(3, 1), 24.0f, 0.001f); EXPECT_NEAR(test(3, 2), 30.0f, 0.001f); EXPECT_NEAR(test(3, 3), 24.0f, 0.001f);
  118. }
  119. TEST(MatrixTest, TestMulLFunction)
  120. {
  121. MatrixF test(true);
  122. test(0, 0) = 1.0f; test(0, 1) = 2.0f; test(0, 2) = 3.0f; test(0, 3) = 4.0f;
  123. test(1, 0) = 4.0f; test(1, 1) = 1.0f; test(1, 2) = 2.0f; test(1, 3) = 3.0f;
  124. test(2, 0) = 3.0f; test(2, 1) = 4.0f; test(2, 2) = 1.0f; test(2, 3) = 2.0f;
  125. test(3, 0) = 2.0f; test(3, 1) = 3.0f; test(3, 2) = 4.0f; test(3, 3) = 1.0f;
  126. MatrixF test2(true);
  127. test2(0, 0) = 4.0f; test2(0, 1) = 3.0f; test2(0, 2) = 2.0f; test2(0, 3) = 1.0f;
  128. test2(1, 0) = 1.0f; test2(1, 1) = 4.0f; test2(1, 2) = 3.0f; test2(1, 3) = 2.0f;
  129. test2(2, 0) = 2.0f; test2(2, 1) = 1.0f; test2(2, 2) = 4.0f; test2(2, 3) = 3.0f;
  130. test2(3, 0) = 3.0f; test2(3, 1) = 2.0f; test2(3, 2) = 1.0f; test2(3, 3) = 4.0f;
  131. test.mulL(test2);
  132. EXPECT_NEAR(test(0, 0), 24.0f, 0.001f); EXPECT_NEAR(test(0, 1), 22.0f, 0.001f); EXPECT_NEAR(test(0, 2), 24.0f, 0.001f); EXPECT_NEAR(test(0, 3), 30.0f, 0.001f);
  133. EXPECT_NEAR(test(1, 0), 30.0f, 0.001f); EXPECT_NEAR(test(1, 1), 24.0f, 0.001f); EXPECT_NEAR(test(1, 2), 22.0f, 0.001f); EXPECT_NEAR(test(1, 3), 24.0f, 0.001f);
  134. EXPECT_NEAR(test(2, 0), 24.0f, 0.001f); EXPECT_NEAR(test(2, 1), 30.0f, 0.001f); EXPECT_NEAR(test(2, 2), 24.0f, 0.001f); EXPECT_NEAR(test(2, 3), 22.0f, 0.001f);
  135. EXPECT_NEAR(test(3, 0), 22.0f, 0.001f); EXPECT_NEAR(test(3, 1), 24.0f, 0.001f); EXPECT_NEAR(test(3, 2), 30.0f, 0.001f); EXPECT_NEAR(test(3, 3), 24.0f, 0.001f);
  136. }
  137. TEST(MatrixTest, TestMulArgMatrixFunction)
  138. {
  139. MatrixF testResult(true);
  140. MatrixF test(true);
  141. test(0, 0) = 1.0f; test(0, 1) = 2.0f; test(0, 2) = 3.0f; test(0, 3) = 4.0f;
  142. test(1, 0) = 4.0f; test(1, 1) = 1.0f; test(1, 2) = 2.0f; test(1, 3) = 3.0f;
  143. test(2, 0) = 3.0f; test(2, 1) = 4.0f; test(2, 2) = 1.0f; test(2, 3) = 2.0f;
  144. test(3, 0) = 2.0f; test(3, 1) = 3.0f; test(3, 2) = 4.0f; test(3, 3) = 1.0f;
  145. MatrixF test2(true);
  146. test2(0, 0) = 4.0f; test2(0, 1) = 3.0f; test2(0, 2) = 2.0f; test2(0, 3) = 1.0f;
  147. test2(1, 0) = 1.0f; test2(1, 1) = 4.0f; test2(1, 2) = 3.0f; test2(1, 3) = 2.0f;
  148. test2(2, 0) = 2.0f; test2(2, 1) = 1.0f; test2(2, 2) = 4.0f; test2(2, 3) = 3.0f;
  149. test2(3, 0) = 3.0f; test2(3, 1) = 2.0f; test2(3, 2) = 1.0f; test2(3, 3) = 4.0f;
  150. testResult.mul(test2, test);
  151. EXPECT_NEAR(testResult(0, 0), 24.0f, 0.001f); EXPECT_NEAR(testResult(0, 1), 22.0f, 0.001f); EXPECT_NEAR(testResult(0, 2), 24.0f, 0.001f); EXPECT_NEAR(testResult(0, 3), 30.0f, 0.001f);
  152. EXPECT_NEAR(testResult(1, 0), 30.0f, 0.001f); EXPECT_NEAR(testResult(1, 1), 24.0f, 0.001f); EXPECT_NEAR(testResult(1, 2), 22.0f, 0.001f); EXPECT_NEAR(testResult(1, 3), 24.0f, 0.001f);
  153. EXPECT_NEAR(testResult(2, 0), 24.0f, 0.001f); EXPECT_NEAR(testResult(2, 1), 30.0f, 0.001f); EXPECT_NEAR(testResult(2, 2), 24.0f, 0.001f); EXPECT_NEAR(testResult(2, 3), 22.0f, 0.001f);
  154. EXPECT_NEAR(testResult(3, 0), 22.0f, 0.001f); EXPECT_NEAR(testResult(3, 1), 24.0f, 0.001f); EXPECT_NEAR(testResult(3, 2), 30.0f, 0.001f); EXPECT_NEAR(testResult(3, 3), 24.0f, 0.001f);
  155. }