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