sandbox
Loading...
Searching...
No Matches
matrix4x4_tests.hpp
1#ifndef LIBSBX_MATH_TESTS_MATRIX4X4_TESTS_HPP_
2#define LIBSBX_MATH_TESTS_MATRIX4X4_TESTS_HPP_
3
4#include <gtest/gtest.h>
5
6#include <libsbx/math/matrix4x4.hpp>
7
8TEST(libsbx_math_matrix4x4, identity) {
9 auto matrix = sbx::math::matrix4x4::identity;
10
11 EXPECT_FLOAT_EQ(matrix[0][0], 1.0f);
12 EXPECT_FLOAT_EQ(matrix[0][1], 0.0f);
13 EXPECT_FLOAT_EQ(matrix[0][2], 0.0f);
14 EXPECT_FLOAT_EQ(matrix[0][3], 0.0f);
15
16 EXPECT_FLOAT_EQ(matrix[1][0], 0.0f);
17 EXPECT_FLOAT_EQ(matrix[1][1], 1.0f);
18 EXPECT_FLOAT_EQ(matrix[1][2], 0.0f);
19 EXPECT_FLOAT_EQ(matrix[1][3], 0.0f);
20
21 EXPECT_FLOAT_EQ(matrix[2][0], 0.0f);
22 EXPECT_FLOAT_EQ(matrix[2][1], 0.0f);
23 EXPECT_FLOAT_EQ(matrix[2][2], 1.0f);
24 EXPECT_FLOAT_EQ(matrix[2][3], 0.0f);
25
26 EXPECT_FLOAT_EQ(matrix[3][0], 0.0f);
27 EXPECT_FLOAT_EQ(matrix[3][1], 0.0f);
28 EXPECT_FLOAT_EQ(matrix[3][2], 0.0f);
29 EXPECT_FLOAT_EQ(matrix[3][3], 1.0f);
30}
31
32TEST(libsbx_math_matrix4x4, zero) {
33 auto matrix = sbx::math::matrix4x4::zero;
34
35 EXPECT_FLOAT_EQ(matrix[0][0], 0.0f);
36 EXPECT_FLOAT_EQ(matrix[0][1], 0.0f);
37 EXPECT_FLOAT_EQ(matrix[0][2], 0.0f);
38 EXPECT_FLOAT_EQ(matrix[0][3], 0.0f);
39
40 EXPECT_FLOAT_EQ(matrix[1][0], 0.0f);
41 EXPECT_FLOAT_EQ(matrix[1][1], 0.0f);
42 EXPECT_FLOAT_EQ(matrix[1][2], 0.0f);
43 EXPECT_FLOAT_EQ(matrix[1][3], 0.0f);
44
45 EXPECT_FLOAT_EQ(matrix[2][0], 0.0f);
46 EXPECT_FLOAT_EQ(matrix[2][1], 0.0f);
47 EXPECT_FLOAT_EQ(matrix[2][2], 0.0f);
48 EXPECT_FLOAT_EQ(matrix[2][3], 0.0f);
49
50 EXPECT_FLOAT_EQ(matrix[3][0], 0.0f);
51 EXPECT_FLOAT_EQ(matrix[3][1], 0.0f);
52 EXPECT_FLOAT_EQ(matrix[3][2], 0.0f);
53 EXPECT_FLOAT_EQ(matrix[3][3], 0.0f);
54}
55
56TEST(libsbx_math_matrix4x4, default_constructor) {
57 auto matrix = sbx::math::matrix4x4{};
58
59 EXPECT_FLOAT_EQ(matrix[0][0], 0.0f);
60 EXPECT_FLOAT_EQ(matrix[0][1], 0.0f);
61 EXPECT_FLOAT_EQ(matrix[0][2], 0.0f);
62 EXPECT_FLOAT_EQ(matrix[0][3], 0.0f);
63
64 EXPECT_FLOAT_EQ(matrix[1][0], 0.0f);
65 EXPECT_FLOAT_EQ(matrix[1][1], 0.0f);
66 EXPECT_FLOAT_EQ(matrix[1][2], 0.0f);
67 EXPECT_FLOAT_EQ(matrix[1][3], 0.0f);
68
69 EXPECT_FLOAT_EQ(matrix[2][0], 0.0f);
70 EXPECT_FLOAT_EQ(matrix[2][1], 0.0f);
71 EXPECT_FLOAT_EQ(matrix[2][2], 0.0f);
72 EXPECT_FLOAT_EQ(matrix[2][3], 0.0f);
73
74 EXPECT_FLOAT_EQ(matrix[3][0], 0.0f);
75 EXPECT_FLOAT_EQ(matrix[3][1], 0.0f);
76 EXPECT_FLOAT_EQ(matrix[3][2], 0.0f);
77 EXPECT_FLOAT_EQ(matrix[3][3], 0.0f);
78}
79
80TEST(libsbx_math_matrix4x4, copy_constructor) {
81 auto matrix = sbx::math::matrix4x4{
82 1, 5, 9, 13,
83 2, 6, 10, 14,
84 3, 7, 11, 15,
85 4, 8, 12, 16
86 };
87
88 auto copy = sbx::math::matrix4x4{matrix};
89
90 EXPECT_FLOAT_EQ(copy[0][0], 1.0f);
91 EXPECT_FLOAT_EQ(copy[0][1], 2.0f);
92 EXPECT_FLOAT_EQ(copy[0][2], 3.0f);
93 EXPECT_FLOAT_EQ(copy[0][3], 4.0f);
94
95 EXPECT_FLOAT_EQ(copy[1][0], 5.0f);
96 EXPECT_FLOAT_EQ(copy[1][1], 6.0f);
97 EXPECT_FLOAT_EQ(copy[1][2], 7.0f);
98 EXPECT_FLOAT_EQ(copy[1][3], 8.0f);
99
100 EXPECT_FLOAT_EQ(copy[2][0], 9.0f);
101 EXPECT_FLOAT_EQ(copy[2][1], 10.0f);
102 EXPECT_FLOAT_EQ(copy[2][2], 11.0f);
103 EXPECT_FLOAT_EQ(copy[2][3], 12.0f);
104
105 EXPECT_FLOAT_EQ(copy[3][0], 13.0f);
106 EXPECT_FLOAT_EQ(copy[3][1], 14.0f);
107 EXPECT_FLOAT_EQ(copy[3][2], 15.0f);
108 EXPECT_FLOAT_EQ(copy[3][3], 16.0f);
109}
110
111TEST(libsbx_math_matrix4x4, move_constructor) {
112 auto matrix = sbx::math::matrix4x4{
113 1, 5, 9, 13,
114 2, 6, 10, 14,
115 3, 7, 11, 15,
116 4, 8, 12, 16
117 };
118
119 auto move = sbx::math::matrix4x4{std::move(matrix)};
120
121 EXPECT_FLOAT_EQ(move[0][0], 1.0f);
122 EXPECT_FLOAT_EQ(move[0][1], 2.0f);
123 EXPECT_FLOAT_EQ(move[0][2], 3.0f);
124 EXPECT_FLOAT_EQ(move[0][3], 4.0f);
125
126 EXPECT_FLOAT_EQ(move[1][0], 5.0f);
127 EXPECT_FLOAT_EQ(move[1][1], 6.0f);
128 EXPECT_FLOAT_EQ(move[1][2], 7.0f);
129 EXPECT_FLOAT_EQ(move[1][3], 8.0f);
130
131 EXPECT_FLOAT_EQ(move[2][0], 9.0f);
132 EXPECT_FLOAT_EQ(move[2][1], 10.0f);
133 EXPECT_FLOAT_EQ(move[2][2], 11.0f);
134 EXPECT_FLOAT_EQ(move[2][3], 12.0f);
135
136 EXPECT_FLOAT_EQ(move[3][0], 13.0f);
137 EXPECT_FLOAT_EQ(move[3][1], 14.0f);
138 EXPECT_FLOAT_EQ(move[3][2], 15.0f);
139 EXPECT_FLOAT_EQ(move[3][3], 16.0f);
140}
141
142TEST(libsbx_math_matrix4x4, scalar_constructor) {
143 auto matrix = sbx::math::matrix4x4{1.0f};
144
145 EXPECT_FLOAT_EQ(matrix[0][0], 1.0f);
146 EXPECT_FLOAT_EQ(matrix[0][1], 1.0f);
147 EXPECT_FLOAT_EQ(matrix[0][2], 1.0f);
148 EXPECT_FLOAT_EQ(matrix[0][3], 1.0f);
149
150 EXPECT_FLOAT_EQ(matrix[1][0], 1.0f);
151 EXPECT_FLOAT_EQ(matrix[1][1], 1.0f);
152 EXPECT_FLOAT_EQ(matrix[1][2], 1.0f);
153 EXPECT_FLOAT_EQ(matrix[1][3], 1.0f);
154
155 EXPECT_FLOAT_EQ(matrix[2][0], 1.0f);
156 EXPECT_FLOAT_EQ(matrix[2][1], 1.0f);
157 EXPECT_FLOAT_EQ(matrix[2][2], 1.0f);
158 EXPECT_FLOAT_EQ(matrix[2][3], 1.0f);
159
160 EXPECT_FLOAT_EQ(matrix[3][0], 1.0f);
161 EXPECT_FLOAT_EQ(matrix[3][1], 1.0f);
162 EXPECT_FLOAT_EQ(matrix[3][2], 1.0f);
163 EXPECT_FLOAT_EQ(matrix[3][3], 1.0f);
164}
165
166TEST(libsbx_math_matrix4x4, copy_assignment) {
167 auto matrix = sbx::math::matrix4x4{
168 1, 5, 9, 13,
169 2, 6, 10, 14,
170 3, 7, 11, 15,
171 4, 8, 12, 16
172 };
173
174 auto copy = matrix;
175
176 EXPECT_FLOAT_EQ(copy[0][0], 1.0f);
177 EXPECT_FLOAT_EQ(copy[0][1], 2.0f);
178 EXPECT_FLOAT_EQ(copy[0][2], 3.0f);
179 EXPECT_FLOAT_EQ(copy[0][3], 4.0f);
180
181 EXPECT_FLOAT_EQ(copy[1][0], 5.0f);
182 EXPECT_FLOAT_EQ(copy[1][1], 6.0f);
183 EXPECT_FLOAT_EQ(copy[1][2], 7.0f);
184 EXPECT_FLOAT_EQ(copy[1][3], 8.0f);
185
186 EXPECT_FLOAT_EQ(copy[2][0], 9.0f);
187 EXPECT_FLOAT_EQ(copy[2][1], 10.0f);
188 EXPECT_FLOAT_EQ(copy[2][2], 11.0f);
189 EXPECT_FLOAT_EQ(copy[2][3], 12.0f);
190
191 EXPECT_FLOAT_EQ(copy[3][0], 13.0f);
192 EXPECT_FLOAT_EQ(copy[3][1], 14.0f);
193 EXPECT_FLOAT_EQ(copy[3][2], 15.0f);
194 EXPECT_FLOAT_EQ(copy[3][3], 16.0f);
195}
196
197TEST(libsbx_math_matrix4x4, move_assignment) {
198 auto matrix = sbx::math::matrix4x4{
199 1, 5, 9, 13,
200 2, 6, 10, 14,
201 3, 7, 11, 15,
202 4, 8, 12, 16
203 };
204
205 auto move = std::move(matrix);
206
207 EXPECT_FLOAT_EQ(move[0][0], 1.0f);
208 EXPECT_FLOAT_EQ(move[0][1], 2.0f);
209 EXPECT_FLOAT_EQ(move[0][2], 3.0f);
210 EXPECT_FLOAT_EQ(move[0][3], 4.0f);
211
212 EXPECT_FLOAT_EQ(move[1][0], 5.0f);
213 EXPECT_FLOAT_EQ(move[1][1], 6.0f);
214 EXPECT_FLOAT_EQ(move[1][2], 7.0f);
215 EXPECT_FLOAT_EQ(move[1][3], 8.0f);
216
217 EXPECT_FLOAT_EQ(move[2][0], 9.0f);
218 EXPECT_FLOAT_EQ(move[2][1], 10.0f);
219 EXPECT_FLOAT_EQ(move[2][2], 11.0f);
220 EXPECT_FLOAT_EQ(move[2][3], 12.0f);
221
222 EXPECT_FLOAT_EQ(move[3][0], 13.0f);
223 EXPECT_FLOAT_EQ(move[3][1], 14.0f);
224 EXPECT_FLOAT_EQ(move[3][2], 15.0f);
225 EXPECT_FLOAT_EQ(move[3][3], 16.0f);
226}
227
228TEST(libsbx_math_matrix4x4, transposed) {
229 auto matrix = sbx::math::matrix4x4{
230 1, 5, 9, 13,
231 2, 6, 10, 14,
232 3, 7, 11, 15,
233 4, 8, 12, 16
234 };
235
236 auto result = sbx::math::matrix4x4::transposed(matrix);
237
238 EXPECT_FLOAT_EQ(result[0][0], 1.0f);
239 EXPECT_FLOAT_EQ(result[0][1], 5.0f);
240 EXPECT_FLOAT_EQ(result[0][2], 9.0f);
241 EXPECT_FLOAT_EQ(result[0][3], 13.0f);
242
243 EXPECT_FLOAT_EQ(result[1][0], 2.0f);
244 EXPECT_FLOAT_EQ(result[1][1], 6.0f);
245 EXPECT_FLOAT_EQ(result[1][2], 10.0f);
246 EXPECT_FLOAT_EQ(result[1][3], 14.0f);
247
248 EXPECT_FLOAT_EQ(result[2][0], 3.0f);
249 EXPECT_FLOAT_EQ(result[2][1], 7.0f);
250 EXPECT_FLOAT_EQ(result[2][2], 11.0f);
251 EXPECT_FLOAT_EQ(result[2][3], 15.0f);
252
253 EXPECT_FLOAT_EQ(result[3][0], 4.0f);
254 EXPECT_FLOAT_EQ(result[3][1], 8.0f);
255 EXPECT_FLOAT_EQ(result[3][2], 12.0f);
256 EXPECT_FLOAT_EQ(result[3][3], 16.0f);
257}
258
259TEST(libsbx_math_matrix4x4, translated) {
260 auto matrix = sbx::math::matrix4x4{
261 1, 5, 9, 13,
262 2, 6, 10, 14,
263 3, 7, 11, 15,
264 4, 8, 12, 16
265 };
266
267 auto result = sbx::math::matrix4x4::translated(matrix, sbx::math::vector3{1.0f, 2.0f, 3.0f});
268
269 EXPECT_FLOAT_EQ(result[0][0], 1.0f);
270 EXPECT_FLOAT_EQ(result[0][1], 2.0f);
271 EXPECT_FLOAT_EQ(result[0][2], 3.0f);
272 EXPECT_FLOAT_EQ(result[0][3], 4.0f);
273
274 EXPECT_FLOAT_EQ(result[1][0], 5.0f);
275 EXPECT_FLOAT_EQ(result[1][1], 6.0f);
276 EXPECT_FLOAT_EQ(result[1][2], 7.0f);
277 EXPECT_FLOAT_EQ(result[1][3], 8.0f);
278
279 EXPECT_FLOAT_EQ(result[2][0], 9.0f);
280 EXPECT_FLOAT_EQ(result[2][1], 10.0f);
281 EXPECT_FLOAT_EQ(result[2][2], 11.0f);
282 EXPECT_FLOAT_EQ(result[2][3], 12.0f);
283
284 EXPECT_FLOAT_EQ(result[3][0], 51.0f);
285 EXPECT_FLOAT_EQ(result[3][1], 58.0f);
286 EXPECT_FLOAT_EQ(result[3][2], 65.0f);
287 EXPECT_FLOAT_EQ(result[3][3], 72.0f);
288}
289
290#endif // LIBSBX_MATH_TESTS_MATRIX4X4_TESTS_HPP_
Definition: matrix4x4.hpp:24
Definition: vector3.hpp:22