test_mat2.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /*
  2. * Copyright (c), Recep Aslantas.
  3. *
  4. * MIT License (MIT), http://opensource.org/licenses/MIT
  5. * Full license can be found in the LICENSE file
  6. */
  7. #include "test_common.h"
  8. #define A_MATRIX2x2 {{1,2},{5,6}}
  9. #ifndef CGLM_TEST_MAT2_ONCE
  10. #define CGLM_TEST_MAT2_ONCE
  11. TEST_IMPL(MACRO_GLM_MAT2_IDENTITY_INIT) {
  12. mat2 m = GLM_MAT2_IDENTITY_INIT;
  13. ASSERT(test_eq(m[0][0], 1.0f))
  14. ASSERT(test_eq(m[0][1], 0.0f))
  15. ASSERT(test_eq(m[1][0], 0.0f))
  16. ASSERT(test_eq(m[1][1], 1.0f))
  17. TEST_SUCCESS
  18. }
  19. TEST_IMPL(MACRO_GLM_MAT2_ZERO_INIT) {
  20. mat2 m = GLM_MAT2_ZERO_INIT;
  21. ASSERT(test_eq(m[0][0], 0.0f))
  22. ASSERT(test_eq(m[0][1], 0.0f))
  23. ASSERT(test_eq(m[1][0], 0.0f))
  24. ASSERT(test_eq(m[1][1], 0.0f))
  25. TEST_SUCCESS
  26. }
  27. TEST_IMPL(MACRO_GLM_MAT2_IDENTITY) {
  28. ASSERT(test_eq(GLM_MAT2_IDENTITY[0][0], 1.0f))
  29. ASSERT(test_eq(GLM_MAT2_IDENTITY[0][1], 0.0f))
  30. ASSERT(test_eq(GLM_MAT2_IDENTITY[1][0], 0.0f))
  31. ASSERT(test_eq(GLM_MAT2_IDENTITY[1][1], 1.0f))
  32. TEST_SUCCESS
  33. }
  34. TEST_IMPL(MACRO_GLM_MAT2_ZERO) {
  35. ASSERT(test_eq(GLM_MAT2_ZERO[0][0], 0.0f))
  36. ASSERT(test_eq(GLM_MAT2_ZERO[0][1], 0.0f))
  37. ASSERT(test_eq(GLM_MAT2_ZERO[1][0], 0.0f))
  38. ASSERT(test_eq(GLM_MAT2_ZERO[1][1], 0.0f))
  39. TEST_SUCCESS
  40. }
  41. #endif /* CGLM_TEST_MAT2_ONCE */
  42. TEST_IMPL(GLM_PREFIX, mat2_copy) {
  43. mat2 m1 = A_MATRIX2x2;
  44. mat2 m2 = GLM_MAT2_IDENTITY_INIT;
  45. GLM(mat2_copy)(m1, m2);
  46. test_assert_mat2_eq(m1, m2);
  47. TEST_SUCCESS
  48. }
  49. TEST_IMPL(GLM_PREFIX, mat2_identity) {
  50. mat2 m1 = GLM_MAT2_IDENTITY_INIT;
  51. mat2 m2 = GLM_MAT2_IDENTITY_INIT;
  52. mat2 m3;
  53. GLM(mat2_identity)(m3);
  54. ASSERTIFY(test_assert_mat2_eq_identity(m1))
  55. ASSERTIFY(test_assert_mat2_eq_identity(m2))
  56. ASSERTIFY(test_assert_mat2_eq_identity(m3))
  57. TEST_SUCCESS
  58. }
  59. TEST_IMPL(GLM_PREFIX, mat2_identity_array) {
  60. int i, count;
  61. mat2 matrices[4] = {
  62. A_MATRIX2x2,
  63. A_MATRIX2x2,
  64. A_MATRIX2x2,
  65. A_MATRIX2x2
  66. };
  67. count = 4;
  68. GLM(mat2_identity_array)(matrices, count);
  69. for (i = 0; i < count; i++) {
  70. ASSERTIFY(test_assert_mat2_eq_identity(matrices[i]))
  71. }
  72. TEST_SUCCESS
  73. }
  74. TEST_IMPL(GLM_PREFIX, mat2_zero) {
  75. mat2 m1 = GLM_MAT2_ZERO_INIT;
  76. mat2 m2 = GLM_MAT2_ZERO_INIT;
  77. mat2 m3;
  78. GLM(mat2_zero)(m3);
  79. ASSERTIFY(test_assert_mat2_eq_zero(m1))
  80. ASSERTIFY(test_assert_mat2_eq_zero(m2))
  81. ASSERTIFY(test_assert_mat2_eq_zero(m3))
  82. TEST_SUCCESS
  83. }
  84. TEST_IMPL(GLM_PREFIX, mat2_mul) {
  85. mat2 m1 = GLM_MAT2_IDENTITY_INIT;
  86. mat2 m2 = GLM_MAT2_IDENTITY_INIT;
  87. mat2 m3;
  88. mat2 m4 = GLM_MAT2_ZERO_INIT;
  89. int i, j, k;
  90. /* test random matrices */
  91. /* random matrices */
  92. test_rand_mat2(m1);
  93. test_rand_mat2(m2);
  94. GLM(mat2_mul)(m1, m2, m3);
  95. for (i = 0; i < 2; i++) {
  96. for (j = 0; j < 2; j++) {
  97. for (k = 0; k < 2; k++)
  98. /* column-major */
  99. m4[i][j] += m1[k][j] * m2[i][k];
  100. }
  101. }
  102. ASSERTIFY(test_assert_mat2_eq(m3, m4))
  103. /* test pre compiled */
  104. GLM(mat2_mul)(m1, m2, m3);
  105. ASSERTIFY(test_assert_mat2_eq(m3, m4))
  106. TEST_SUCCESS
  107. }
  108. TEST_IMPL(GLM_PREFIX, mat2_transpose_to) {
  109. mat2 mat = A_MATRIX2x2;
  110. mat2 m1;
  111. GLM(mat2_transpose_to)(mat, m1);
  112. ASSERTIFY(test_assert_mat2_eqt(mat, m1))
  113. TEST_SUCCESS
  114. }
  115. TEST_IMPL(GLM_PREFIX, mat2_transpose) {
  116. mat2 mat = A_MATRIX2x2;
  117. mat2 m1;
  118. GLM(mat2_copy)(mat, m1);
  119. GLM(mat2_transpose)(m1);
  120. ASSERTIFY(test_assert_mat2_eqt(mat, m1))
  121. TEST_SUCCESS
  122. }
  123. TEST_IMPL(GLM_PREFIX, mat2_mulv) {
  124. vec2 res;
  125. mat2 mat = A_MATRIX2x2;
  126. vec2 v = {11.0f, 21.0f};
  127. int i;
  128. GLM(mat2_mulv)(mat, v, res);
  129. for (i = 0; i < 2; i++) {
  130. ASSERT(test_eq(res[i], v[0] * mat[0][i] + v[1] * mat[1][i]))
  131. }
  132. TEST_SUCCESS
  133. }
  134. TEST_IMPL(GLM_PREFIX, mat2_trace) {
  135. mat2 mat = A_MATRIX2x2;
  136. float trace;
  137. trace = GLM(mat2_trace)(mat);
  138. ASSERT(test_eq(trace, mat[0][0] + mat[1][1]))
  139. TEST_SUCCESS
  140. }
  141. TEST_IMPL(GLM_PREFIX, mat2_scale) {
  142. mat2 m1 = A_MATRIX2x2;
  143. mat2 m2 = A_MATRIX2x2;
  144. int i, j, scale;
  145. scale = rand() % 100;
  146. GLM(mat2_scale)(m1, (float)scale);
  147. for (i = 0; i < 2; i++) {
  148. for (j = 0; j < 2; j++) {
  149. ASSERT(test_eq(m1[i][j], m2[i][j] * scale))
  150. }
  151. }
  152. TEST_SUCCESS
  153. }
  154. TEST_IMPL(GLM_PREFIX, mat2_det) {
  155. TEST_SUCCESS
  156. }
  157. TEST_IMPL(GLM_PREFIX, mat2_inv) {
  158. mat2 m1 = GLM_MAT2_IDENTITY_INIT;
  159. mat2 m2 = GLM_MAT2_IDENTITY_INIT;
  160. mat2 m3;
  161. int i;
  162. m1[0][0] = 41.0f;
  163. m1[0][1] = 0.0f;
  164. m1[1][0] = 0.0f;
  165. m1[1][1] = 70.0f;
  166. for (i = 0; i < 10000; i++) {
  167. /* test inverse precise */
  168. GLM(mat2_inv)(m1, m2);
  169. GLM(mat2_inv)(m2, m3);
  170. ASSERTIFY(test_assert_mat2_eq(m1, m3))
  171. }
  172. TEST_SUCCESS
  173. }
  174. TEST_IMPL(GLM_PREFIX, mat2_swap_col) {
  175. mat2 m1 = A_MATRIX2x2;
  176. mat2 m2 = A_MATRIX2x2;
  177. GLM(mat2_swap_col)(m1, 0, 1);
  178. ASSERTIFY(test_assert_vec2_eq(m1[0], m2[1]))
  179. ASSERTIFY(test_assert_vec2_eq(m1[1], m2[0]))
  180. TEST_SUCCESS
  181. }
  182. TEST_IMPL(GLM_PREFIX, mat2_swap_row) {
  183. mat2 m1 = A_MATRIX2x2;
  184. mat2 m2 = A_MATRIX2x2;
  185. GLM(mat2_swap_row)(m1, 0, 1);
  186. ASSERT(test_eq(m1[0][0], m2[0][1]))
  187. ASSERT(test_eq(m1[0][1], m2[0][0]))
  188. ASSERT(test_eq(m1[1][0], m2[1][1]))
  189. ASSERT(test_eq(m1[1][1], m2[1][0]))
  190. TEST_SUCCESS
  191. }
  192. TEST_IMPL(GLM_PREFIX, mat2_rmc) {
  193. mat2 mat = A_MATRIX2x2;
  194. vec2 v = {11.0f, 12.0f};
  195. vec2 v1;
  196. float r1, r2;
  197. int i;
  198. r1 = GLM(mat2_rmc)(v, mat, v);
  199. for (i = 0; i < 2; i++) {
  200. v1[i] = v[0] * mat[i][0] + v[1] * mat[i][1];
  201. }
  202. r2 = v[0] * v1[0] + v[1] * v1[1];
  203. ASSERT(test_eq(r1, r2))
  204. TEST_SUCCESS
  205. }
  206. #undef A_MATRIX2x2