10 for (
int i = 0; i < N; ++i) {
11 std::cout << x[i] <<
" ";
13 std::cout << std::endl;
17 for (
int j = 0; j < M; ++j) {
18 for (
int i = 0; i < N; ++i) {
19 std::cout << A[i][j] <<
" ";
21 std::cout << std::endl;
23 std::cout << std::endl;
29 return norm2_2(x - y) < 1.0e-3f;
47 assert(m2[0] ==
vec2(1,0));
48 assert(m2[1] ==
vec2(0,1));
51 assert(i2[0] ==
ivec2(1,0));
52 assert(i2[1] ==
ivec2(0,1));
55 assert(m3[0] ==
vec3(1,0,0));
56 assert(m3[1] ==
vec3(0,1,0));
57 assert(m3[2] ==
vec3(0,0,1));
60 assert(i3[0] ==
ivec3(1,0,0));
61 assert(i3[1] ==
ivec3(0,1,0));
62 assert(i3[2] ==
ivec3(0,0,1));
65 assert(m4[0] ==
vec4(1,0,0,0));
66 assert(m4[1] ==
vec4(0,1,0,0));
67 assert(m4[2] ==
vec4(0,0,1,0));
68 assert(m4[3] ==
vec4(0,0,0,1));
71 assert(i4[0] ==
ivec4(1,0,0,0));
72 assert(i4[1] ==
ivec4(0,1,0,0));
73 assert(i4[2] ==
ivec4(0,0,1,0));
74 assert(i4[3] ==
ivec4(0,0,0,1));
77 assert(m32[0] ==
vec3(1,0,0));
78 assert(m32[1] ==
vec3(0,1,0));
81 assert(m23[0] ==
vec2(1,0));
82 assert(m23[1] ==
vec2(0,1));
83 assert(m23[2] ==
vec2(0,0));
88 assert(m2[0] ==
vec2(2,0));
89 assert(m2[1] ==
vec2(0,3));
92 assert(i2[0] ==
ivec2(2,0));
93 assert(i2[1] ==
ivec2(0,3));
96 assert(m3[0] ==
vec3(2,0,0));
97 assert(m3[1] ==
vec3(0,3,0));
98 assert(m3[2] ==
vec3(0,0,4));
100 imat3 i3(
ivec3(2,3,4));
101 assert(i3[0] ==
ivec3(2,0,0));
102 assert(i3[1] ==
ivec3(0,3,0));
103 assert(i3[2] ==
ivec3(0,0,4));
106 assert(m4[0] ==
vec4(2,0,0,0));
107 assert(m4[1] ==
vec4(0,3,0,0));
108 assert(m4[2] ==
vec4(0,0,4,0));
109 assert(m4[3] ==
vec4(0,0,0,5));
111 imat4 i4(
ivec4(2,3,4,5));
112 assert(i4[0] ==
ivec4(2,0,0,0));
113 assert(i4[1] ==
ivec4(0,3,0,0));
114 assert(i4[2] ==
ivec4(0,0,4,0));
115 assert(i4[3] ==
ivec4(0,0,0,5));
117 mat32 m32(
vec2(2,3));
118 assert(m32[0] ==
vec3(2,0,0));
119 assert(m32[1] ==
vec3(0,3,0));
121 mat23 m23(
vec2(2,3));
122 assert(m23[0] ==
vec2(2,0));
123 assert(m23[1] ==
vec2(0,3));
124 assert(m23[2] ==
vec2(0,0));
129 assert(m2[0] ==
vec2(2,3));
130 assert(m2[1] ==
vec2(4,5));
133 assert(i2[0] ==
ivec2(2,3));
134 assert(i2[1] ==
ivec2(4,5));
137 assert(m3[0] ==
vec3(2,3,4));
138 assert(m3[1] ==
vec3(5,6,7));
139 assert(m3[2] ==
vec3(8,9,1));
142 assert(i3[0] ==
ivec3(2,3,4));
143 assert(i3[1] ==
ivec3(5,6,7));
144 assert(i3[2] ==
ivec3(8,9,1));
146 mat4 m4(
vec4(2,3,4,5),
vec4(3,4,5,6),
vec4(4,5,6,7),
vec4(5,6,7,8));
147 assert(m4[0] ==
vec4(2,3,4,5));
148 assert(m4[1] ==
vec4(3,4,5,6));
149 assert(m4[2] ==
vec4(4,5,6,7));
150 assert(m4[3] ==
vec4(5,6,7,8));
152 imat4 i4(
ivec4(2,3,4,5),
ivec4(3,4,5,6),
ivec4(4,5,6,7),
ivec4(5,6,7,8));
153 assert(i4[0] ==
ivec4(2,3,4,5));
154 assert(i4[1] ==
ivec4(3,4,5,6));
155 assert(i4[2] ==
ivec4(4,5,6,7));
156 assert(i4[3] ==
ivec4(5,6,7,8));
159 assert(m32[0] ==
vec3(2,3,4));
160 assert(m32[1] ==
vec3(5,6,7));
163 assert(m23[0] ==
vec2(2,3));
164 assert(m23[1] ==
vec2(4,5));
165 assert(m23[2] ==
vec2(6,7));
170 m2[1] =
vec2(8,9); m2[0][1] = 7;
171 assert(m2[0] ==
vec2(2,7));
172 assert(m2[1] ==
vec2(8,9));
174 imat2 i2(
ivec2(2,3));
175 i2[0] =
ivec2(8,9); i2[1][1] = 7;
176 assert(i2[0] ==
ivec2(8,9));
177 assert(i2[1] ==
ivec2(0,7));
180 m3[1] =
vec3(7,8,9); m3[0][1] = 6;
181 assert(m3[0] ==
vec3(2,6,0));
182 assert(m3[1] ==
vec3(7,8,9));
183 assert(m3[2] ==
vec3(0,0,4));
185 imat3 i3(
ivec3(2,3,4));
186 i3[0] =
ivec3(7,8,9); i3[2][0] = 6;
187 assert(i3[0] ==
ivec3(7,8,9));
188 assert(i3[1] ==
ivec3(0,3,0));
189 assert(i3[2] ==
ivec3(6,0,4));
192 m4[3] =
vec4(6,7,8,9); m4[1][1] = 1;
193 assert(m4[0] ==
vec4(2,0,0,0));
194 assert(m4[1] ==
vec4(0,1,0,0));
195 assert(m4[2] ==
vec4(0,0,4,0));
196 assert(m4[3] ==
vec4(6,7,8,9));
198 imat4 i4(
ivec4(2,3,4,5));
199 i4[1] =
ivec4(6,7,8,9); i4[2][3] = 1;
200 assert(i4[0] ==
ivec4(2,0,0,0));
201 assert(i4[1] ==
ivec4(6,7,8,9));
202 assert(i4[2] ==
ivec4(0,0,4,1));
203 assert(i4[3] ==
ivec4(0,0,0,5));
205 mat32 m32(
vec2(2,3));
206 m32[0] =
vec3(7,8,9); m32[1][0] = 6;
207 assert(m32[0] ==
vec3(7,8,9));
208 assert(m32[1] ==
vec3(6,3,0));
210 mat23 m23(
vec2(2,3));
211 m23[1] =
vec2(8,9); m23[1][0] = 7;
212 assert(m23[0] ==
vec2(2,0));
213 assert(m23[1] ==
vec2(7,9));
214 assert(m23[2] ==
vec2(0,0));
236 mat4 m4(
vec4(1,2,3,4),
vec4(3,4,5,6),
vec4(5,6,7,8),
vec4(7,8,9,0));
237 mat4 n4(
vec4(1,2,0,4),
vec4(3,4,5,6),
vec4(5,6,7,8),
vec4(7,8,9,0));
238 mat4 o4(
vec4(1,2,3,4),
vec4(0,4,5,6),
vec4(5,6,7,8),
vec4(7,8,9,0));
239 mat4 p4(
vec4(1,2,3,4),
vec4(3,4,5,6),
vec4(5,0,7,8),
vec4(7,8,9,0));
240 mat4 q4(
vec4(1,2,3,4),
vec4(3,4,5,6),
vec4(5,6,7,8),
vec4(7,8,9,1));
247 imat4 i4(
ivec4(1,2,3,4),
ivec4(3,4,5,6),
ivec4(5,6,7,8),
ivec4(7,8,9,0));
248 imat4 j4(
ivec4(1,0,3,4),
ivec4(3,4,5,6),
ivec4(5,6,7,8),
ivec4(7,8,9,0));
249 imat4 k4(
ivec4(1,2,3,4),
ivec4(3,4,0,6),
ivec4(5,6,7,8),
ivec4(7,8,9,0));
250 imat4 l4(
ivec4(1,2,3,4),
ivec4(3,4,5,6),
ivec4(5,6,7,0),
ivec4(7,8,9,0));
251 imat4 h4(
ivec4(1,2,3,4),
ivec4(3,4,5,6),
ivec4(5,6,7,8),
ivec4(0,8,9,0));
279 m2[1][0] = 9; n2 = m2;
282 imat2 i2(
ivec2(2,3));
285 i2[0][1] = 9; j2 = i2;
291 m3[2][1] = 8; n3 = m3;
294 imat3 i3(
ivec3(3,4,5));
297 i3[1][2] = 8; j3 = i3;
303 m3[3][1] = 2; n4 = m4;
306 imat4 i4(
ivec4(4,5,6,7));
309 i3[0][1] = 1; j4 = i4;
314 mat4 m4(
vec4(1,2,3,4),
vec4(4,5,6,7),
vec4(7,8,9,1),
vec4(1,0,0,0));
317 assert(
mat3(m4) == m3);
318 assert(
mat2(m4) == m2);
319 assert(
mat2(m3) == m2);
321 imat4 i4(
ivec4(1,2,3,4),
ivec4(4,5,6,7),
ivec4(7,8,9,1),
ivec4(1,0,0,0));
324 assert(imat3(i4) == i3);
325 assert(imat2(i4) == i2);
326 assert(imat2(i3) == i2);
328 assert(mat32(m4) == mat32(
vec3(1,2,3),
vec3(4,5,6)));
329 assert(mat32(m3) == mat32(
vec3(1,2,3),
vec3(4,5,6)));
330 assert(mat23(m4) == mat23(
vec2(1,2),
vec2(4,5),
vec2(7,8)));
331 assert(mat23(m3) == mat23(
vec2(1,2),
vec2(4,5),
vec2(7,8)));
359 mat4 m4(
vec4(1,2,3,4),
vec4(4,5,6,7),
vec4(7,8,9,1),
vec4(1,0,0,0));
360 mat4 n4(
vec4(2,4,6,8),
vec4(1,3,5,7),
vec4(7,8,9,2),
vec4(0,0,0,1));
363 assert(o4 ==
mat4(
vec4(3,6,9,12),
vec4(5,8,11,14),
vec4(14,16,18,3),
vec4(1,0,0,1)));
364 assert(p4 ==
mat4(
vec4(-1,-2,-3,-4),
vec4(3,2,1,0),
vec4(0,0,0,-1),
vec4(1,0,0,-1)));
369 assert(-m4 ==
mat4(
vec4(-1,-2,-3,-4),
vec4(-4,-5,-6,-7),
vec4(-7,-8,-9,-1),
vec4(-1,0,0,0)));
371 imat4 i4(
ivec4(0,1,2,3),
ivec4(4,3,2,1),
ivec4(1,1,1,1),
ivec4(5,5,4,4));
372 imat4 j4(
ivec4(2,3,4,5),
ivec4(1,1,2,2),
ivec4(0,0,1,2),
ivec4(1,2,2,0));
375 assert(k4 == imat4(
ivec4(2,4,6,8),
ivec4(5,4,4,3),
ivec4(1,1,2,3),
ivec4(6,7,6,4)));
376 assert(l4 == imat4(
ivec4(-2,-2,-2,-2),
ivec4(3,2,0,-1),
ivec4(1,1,0,-1),
ivec4(4,3,2,4)));
381 assert(-i4 == imat4(
ivec4(0,-1,-2,-3),
ivec4(-4,-3,-2,-1),
ivec4(-1,-1,-1,-1),
ivec4(-5,-5,-4,-4)));
385 mat32 o32 = m32 + n32;
386 mat32 p32 = m32 - n32;
387 assert(o32 == mat32(
vec3(4,5,7),
vec3(8,6,3)));
388 assert(p32 == mat32(
vec3(2,3,3),
vec3(0,-2,-3)));
393 assert(-m32 == mat32(
vec3(-3,-4,-5),
vec3(-4,-2,0)));
399 assert((2.0f * m3) == n3);
400 assert((m3 * 2.0f) == n3);
406 assert((2 * i3) == j3);
407 assert((i3 * 2) == j3);
411 mat4 m4(
vec4(1,2,3,4),
vec4(4, 5, 6, 7),
vec4( 7, 8, 9,10),
vec4(0,0,-1,-2));
412 mat4 n4(
vec4(2,4,6,8),
vec4(8,10,12,14),
vec4(14,16,18,20),
vec4(0,0,-2,-4));
413 assert((2.0f * m4) == n4);
414 assert((m4 * 2.0f) == n4);
418 imat4 i4(
ivec4(0,1,2,3),
ivec4(1,0,0,2),
ivec4(3,2,1,0),
ivec4(0,0,-1,-2));
419 imat4 j4(
ivec4(0,3,6,9),
ivec4(3,0,0,6),
ivec4(9,6,3,0),
ivec4(0,0,-3,-6));
420 assert((3 * i4) == j4);
421 assert((i4 * 3) == j4);
425 mat32 m32(
vec3( 3, 4, 5),
vec3( 4, 2,0));
426 mat32 n32(
vec3(-6,-8,-10),
vec3(-8,-4,0));
427 assert((-2.0f * m32) == n32);
428 assert((m32 * -2.0f) == n32);
435 assert((m3 *
vec3(1,0,0)) ==
vec3( 1, 2, 3));
436 assert((m3 *
vec3(0,2,0)) ==
vec3( 8,10,12));
437 assert((m3 *
vec3(0,0,3)) ==
vec3(21,24,27));
438 assert((m3 *
vec3(1,2,3)) ==
vec3(30,36,42));
441 assert((i3 *
ivec3(-1,0,0)) ==
ivec3( 0, 2,-1));
442 assert((i3 *
ivec3( 0,0,0)) ==
ivec3( 0, 0, 0));
443 assert((i3 *
ivec3( 0,0,3)) ==
ivec3(-3,-6, 3));
444 assert((i3 *
ivec3(-1,0,3)) ==
ivec3(-3,-4, 2));
446 mat4 m4(
vec4(1,2,3,4),
vec4(4,5,6,7),
vec4(7,8,9,1),
vec4(0,1,0,-1));
447 assert((m4 *
vec4(1,0,0,0)) ==
vec4( 1, 2, 3, 4));
448 assert((m4 *
vec4(0,2,0,0)) ==
vec4( 8,10,12,14));
449 assert((m4 *
vec4(0,0,3,0)) ==
vec4(21,24,27, 3));
450 assert((m4 *
vec4(0,0,0,4)) ==
vec4( 0, 4, 0,-4));
451 assert((m4 *
vec4(1,2,3,4)) ==
vec4(30,40,42,17));
453 imat4 i4(
ivec4(-1,2,0,-3),
ivec4(0,1,2,-1),
ivec4(0,1,1,0),
ivec4(-1,1,0,-1));
454 assert((i4 *
ivec4(-1,0, 0,0)) ==
ivec4( 1,-2, 0, 3));
455 assert((i4 *
ivec4( 0,2, 0,0)) ==
ivec4( 0, 2, 4,-2));
456 assert((i4 *
ivec4( 0,0,-2,0)) ==
ivec4( 0,-2,-2, 0));
457 assert((i4 *
ivec4( 0,0, 0,1)) ==
ivec4(-1, 1, 0,-1));
458 assert((i4 *
ivec4(-1,2,-2,1)) ==
ivec4( 0,-1, 2, 0));
461 assert((m32 *
vec2(2,3)) ==
vec3(18,14,10));
464 assert((m23 *
vec3(1,2,3)) ==
vec2(17,20));
473 assert(((m3 * n3) * o3) == (m3 * (n3 * o3)));
479 mat4 m4(
vec4(1,-1,1,0),
vec4(2,0,-1,1),
vec4(0,1,1,-1),
vec4(2,0,1,-1));
480 mat4 n4(
vec4(1,1,-1,1),
vec4(0,-2,1,0),
vec4(1,0,1,-1),
vec4(0,1,2,-2));
481 assert((m4 * n4) ==
mat4(
vec4(5,-2,0,1),
vec4(-4,1,3,-3),
vec4(-1,0,1,0),
vec4(-2,2,-1,1)));
482 assert((n4 * m4) ==
mat4(
vec4(2,3,-1,0),
vec4(1,3,-1,1),
vec4(1,-3,0,1),
vec4(3,1,-3,3)));
484 imat4 i4(
ivec4(1,-1,1,2),
ivec4(2,-1,-1,1),
ivec4(2,1,1,-1),
ivec4(2,-1,1,-1));
485 imat4 j4(
ivec4(1,1,-1,1),
ivec4(2,-2,1,-1),
ivec4(1,-2,1,-1),
ivec4(-1,1,2,-2));
486 assert((i4 * j4) == imat4(
ivec4(3,-4,0,3),
ivec4(-2,2,4,2),
ivec4(-3,3,3,0),
ivec4(1,4,-2,-1)));
488 mat32 m32(
vec3(1,2,-1),
vec3(-1,-1,2));
492 assert((m3 * m32) == mat32(
vec3(5,-2,-2),
vec3(-3,3,2)));
493 assert((m23 * m3 ) == mat23(
vec2(0,-2),
vec2(1,-3),
vec2(3,-2)));
503 mat4 m4(
vec4(1,-1,1,0),
vec4(2,0,-1,1),
vec4(0,1,1,-1),
vec4(2,0,1,-1));
504 assert(
transpose(m4) ==
mat4(
vec4(1,2,0,2),
vec4(-1,0,1,0),
vec4(1,-1,1,1),
vec4(0,1,-1,-1)));
506 imat4 i4(
ivec4(1,-1,1,2),
ivec4(2,-1,-1,1),
ivec4(2,1,1,-1),
ivec4(2,-1,1,-1));
507 assert(
transpose(i4) == imat4(
ivec4(1,2,2,2),
ivec4(-1,-1,1,-1),
ivec4(1,-1,1,1),
ivec4(2,1,-1,-1)));
520 assert(m2*i2 ==
mat2());
521 assert(i2*m2 ==
mat2());
527 assert(m3*i3 ==
mat3());
528 assert(i3*m3 ==
mat3());
530 mat4 m4(
vec4(0,1,1,0),
vec4(-1,0,1,0),
vec4(1,1,0,-1),
vec4(0,1,0,0));
533 assert(
approxEq(i4,
mat4(
vec4(1,-1,0,-1),
vec4(0,0,0,1),
vec4(1,0,0,-1),
vec4(1,-1,-1,0))));
545 mat4 m4(
vec4(1,-1,1,2),
vec4(2,0,-1,1),
vec4(0,1,1,0),
vec4(0,1,1,3));
548 imat4 i4(
ivec4(1,2,1,-3),
ivec4(-2,3,-1,0),
ivec4(2,1,4,-2),
ivec4(0,2,2,2));
551 mat32 m32(
vec3(1,2,-1),
vec3(-1,-1,2));
573 A =
mat4(x, y, z, w);
matMxN< 3, 3, float > mat3
void test_inverse(const mat4 &A, mat4 &B)
void test_add(const mat4 &A, const mat4 &B, mat4 &C)
void test_mul(float x, const mat4 &A, mat4 &B)
void print(const vecN< N, T > &x)
matMxN< 4, 4, float > mat4
void test_change0(const vec4 &x, mat4 &A)
void test_extr0(const mat4 &A, vec4 &x)
void test_negate(const mat4 &A, mat4 &B)
T norm2_2(const matMxN< M, N, T > &A)
bool test_not_equal(const mat4 &A, const mat4 &B)
bool approxEq(const mat4 &x, const mat4 &y)
void test_extr2(const mat4 &A, vec4 &x)
matMxN< 2, 2, float > mat2
void test_sub(const mat4 &A, const mat4 &B, mat4 &C)
void test_norm(const mat4 &A, float &x)
T determinant(const matMxN< 2, 2, T > &A)
void test_change2(const vec4 &x, mat4 &A)
void test_transpose(const mat4 &A, mat4 &B)
matMxN< 2, 2, T > inverse(const matMxN< 2, 2, T > &A)
void test_determinant(const mat4 &A, float &x)
matMxN< N, M, T > transpose(const matMxN< M, N, T > &A)
bool test_equal(const mat4 &A, const mat4 &B)
void test_constr(mat4 &A)