1#ifndef LIBSBX_MATH_TESTS_VECTOR4_TESTS_HPP_
2#define LIBSBX_MATH_TESTS_VECTOR4_TESTS_HPP_
6#include <gtest/gtest.h>
8#include <libsbx/math/vector4.hpp>
10TEST(libsbx_math_vector4, zero) {
11 const auto vector = sbx::math::vector4::zero;
13 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
14 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
15 EXPECT_FLOAT_EQ(vector.z(), 0.0f);
16 EXPECT_FLOAT_EQ(vector.w(), 0.0f);
19TEST(libsbx_math_vector4, one) {
20 const auto vector = sbx::math::vector4::one;
22 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
23 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
24 EXPECT_FLOAT_EQ(vector.z(), 1.0f);
25 EXPECT_FLOAT_EQ(vector.w(), 1.0f);
28TEST(libsbx_math_vector4, default_constructor) {
31 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
32 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
33 EXPECT_FLOAT_EQ(vector.z(), 0.0f);
34 EXPECT_FLOAT_EQ(vector.w(), 0.0f);
37TEST(libsbx_math_vector4, base_constructor) {
41 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
42 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
43 EXPECT_FLOAT_EQ(vector.z(), 1.0f);
44 EXPECT_FLOAT_EQ(vector.w(), 1.0f);
47TEST(libsbx_math_vector4, single_value_constructor) {
50 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
51 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
52 EXPECT_FLOAT_EQ(vector.z(), 1.0f);
53 EXPECT_FLOAT_EQ(vector.w(), 1.0f);
56TEST(libsbx_math_vector4, multi_value_constructor) {
59 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
60 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
61 EXPECT_FLOAT_EQ(vector.z(), 3.0f);
62 EXPECT_FLOAT_EQ(vector.w(), 4.0f);
65TEST(libsbx_math_vector4, vector3_constructor) {
68 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
69 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
70 EXPECT_FLOAT_EQ(vector.z(), 3.0f);
71 EXPECT_FLOAT_EQ(vector.w(), 0.0f);
75 EXPECT_FLOAT_EQ(other.x(), 1.0f);
76 EXPECT_FLOAT_EQ(other.y(), 2.0f);
77 EXPECT_FLOAT_EQ(other.z(), 3.0f);
78 EXPECT_FLOAT_EQ(other.w(), 4.0f);
81TEST(libsbx_math_vector4, dot_product) {
85 const auto result = sbx::math::vector4::dot(lhs, rhs);
87 EXPECT_FLOAT_EQ(result, 20.0f);
90TEST(libsbx_math_vector4, normalized) {
92 const auto result = sbx::math::vector4::normalized(vector);
94 EXPECT_FLOAT_EQ(result.x(), 0.1825741858350553711523232609336f);
95 EXPECT_FLOAT_EQ(result.y(), 0.3651483716701107423046465218672f);
96 EXPECT_FLOAT_EQ(result.z(), 0.5477225575051661134569697828008f);
97 EXPECT_FLOAT_EQ(result.w(), 0.7302967433402214846092930437344f);
98 EXPECT_FLOAT_EQ(result.length(), 1.0f);
101TEST(libsbx_math_vector4, conversion) {
106 EXPECT_FLOAT_EQ(result.x(), 1.0f);
107 EXPECT_FLOAT_EQ(result.y(), 2.0f);
108 EXPECT_FLOAT_EQ(result.z(), 3.0f);
111TEST(libsbx_math_vector4, copy_constructor) {
113 const auto other = vector;
115 EXPECT_FLOAT_EQ(other.x(), 1.0f);
116 EXPECT_FLOAT_EQ(other.y(), 2.0f);
117 EXPECT_FLOAT_EQ(other.z(), 3.0f);
118 EXPECT_FLOAT_EQ(other.w(), 4.0f);
121TEST(libsbx_math_vector4, move_constructor) {
123 const auto other = std::move(vector);
125 EXPECT_FLOAT_EQ(other.x(), 1.0f);
126 EXPECT_FLOAT_EQ(other.y(), 2.0f);
127 EXPECT_FLOAT_EQ(other.z(), 3.0f);
128 EXPECT_FLOAT_EQ(other.w(), 4.0f);
131TEST(libsbx_math_vector4, copy_assignment) {
136 EXPECT_FLOAT_EQ(other.x(), 1.0f);
137 EXPECT_FLOAT_EQ(other.y(), 2.0f);
138 EXPECT_FLOAT_EQ(other.z(), 3.0f);
139 EXPECT_FLOAT_EQ(other.w(), 4.0f);
142TEST(libsbx_math_vector4, move_assignment) {
145 other = std::move(vector);
147 EXPECT_FLOAT_EQ(other.x(), 1.0f);
148 EXPECT_FLOAT_EQ(other.y(), 2.0f);
149 EXPECT_FLOAT_EQ(other.z(), 3.0f);
150 EXPECT_FLOAT_EQ(other.w(), 4.0f);
153TEST(libsbx_math_vector4, addition_assignment) {
159 EXPECT_FLOAT_EQ(vector.x(), 2.0f);
160 EXPECT_FLOAT_EQ(vector.y(), 4.0f);
161 EXPECT_FLOAT_EQ(vector.z(), 6.0f);
162 EXPECT_FLOAT_EQ(vector.w(), 8.0f);
165TEST(libsbx_math_vector4, subtraction_assignment) {
171 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
172 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
173 EXPECT_FLOAT_EQ(vector.z(), 0.0f);
174 EXPECT_FLOAT_EQ(vector.w(), 0.0f);
177TEST(libsbx_math_vector4, multiplication_assignment) {
182 EXPECT_FLOAT_EQ(vector.x(), 2.0f);
183 EXPECT_FLOAT_EQ(vector.y(), 4.0f);
184 EXPECT_FLOAT_EQ(vector.z(), 6.0f);
185 EXPECT_FLOAT_EQ(vector.w(), 8.0f);
188TEST(libsbx_math_vector4, division_assignment) {
193 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
194 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
195 EXPECT_FLOAT_EQ(vector.z(), 3.0f);
196 EXPECT_FLOAT_EQ(vector.w(), 4.0f);
199TEST(libsbx_math_vector4, equality) {
203 EXPECT_TRUE(lhs == rhs);
204 EXPECT_FALSE(lhs != rhs);
207TEST(libsbx_math_vector4, inequality) {
211 EXPECT_TRUE(lhs != rhs);
212 EXPECT_FALSE(lhs == rhs);
215TEST(libsbx_math_vector4, addition) {
218 const auto result = lhs + rhs;
220 EXPECT_FLOAT_EQ(result.x(), 5.0f);
221 EXPECT_FLOAT_EQ(result.y(), 5.0f);
222 EXPECT_FLOAT_EQ(result.z(), 5.0f);
223 EXPECT_FLOAT_EQ(result.w(), 5.0f);
226TEST(libsbx_math_vector4, subtraction) {
229 const auto result = lhs - rhs;
231 EXPECT_FLOAT_EQ(result.x(), -3.0f);
232 EXPECT_FLOAT_EQ(result.y(), -1.0f);
233 EXPECT_FLOAT_EQ(result.z(), 1.0f);
234 EXPECT_FLOAT_EQ(result.w(), 3.0f);
237TEST(libsbx_math_vector4, negation) {
239 const auto result = -vector;
241 EXPECT_FLOAT_EQ(result.x(), -1.0f);
242 EXPECT_FLOAT_EQ(result.y(), -2.0f);
243 EXPECT_FLOAT_EQ(result.z(), -3.0f);
244 EXPECT_FLOAT_EQ(result.w(), -4.0f);
247TEST(libsbx_math_vector4, multiplication) {
250 const auto result = lhs * 2.0f;
252 EXPECT_FLOAT_EQ(result.x(), 2.0f);
253 EXPECT_FLOAT_EQ(result.y(), 4.0f);
254 EXPECT_FLOAT_EQ(result.z(), 6.0f);
255 EXPECT_FLOAT_EQ(result.w(), 8.0f);
258TEST(libsbx_math_vector4, division) {
261 const auto result = lhs / 2.0f;
263 EXPECT_FLOAT_EQ(result.x(), 2.0f);
264 EXPECT_FLOAT_EQ(result.y(), 3.0f);
265 EXPECT_FLOAT_EQ(result.z(), 3.0f);
266 EXPECT_FLOAT_EQ(result.w(), 2.0f);
269TEST(libsbx_math_vector4, length_squared) {
272 const auto result = vector.length_squared();
274 EXPECT_FLOAT_EQ(result, 120.0f);
277TEST(libsbx_math_vector4, length) {
280 const auto result = vector.length();
282 EXPECT_FLOAT_EQ(result, 10.954451150103322f);
285TEST(libsbx_math_vector4, normalize) {
290 EXPECT_FLOAT_EQ(vector.x(), 0.1825741858350553711523232609336f);
291 EXPECT_FLOAT_EQ(vector.y(), 0.3651483716701107423046465218672f);
292 EXPECT_FLOAT_EQ(vector.z(), 0.5477225575051661134569697828008f);
293 EXPECT_FLOAT_EQ(vector.w(), 0.7302967433402214846092930437344f);
294 EXPECT_FLOAT_EQ(vector.length(), 1.0f);
297TEST(libsbx_math_vector4, get_x) {
300 const auto result = vector.x();
302 EXPECT_FLOAT_EQ(result, 1.0f);
305TEST(libsbx_math_vector4, set_x) {
310 EXPECT_FLOAT_EQ(vector.x(), 2.0f);
313TEST(libsbx_math_vector4, get_y) {
316 const auto result = vector.y();
318 EXPECT_FLOAT_EQ(result, 2.0f);
321TEST(libsbx_math_vector4, set_y) {
326 EXPECT_FLOAT_EQ(vector.y(), 3.0f);
329TEST(libsbx_math_vector4, get_z) {
332 const auto result = vector.z();
334 EXPECT_FLOAT_EQ(result, 3.0f);
337TEST(libsbx_math_vector4, set_z) {
342 EXPECT_FLOAT_EQ(vector.z(), 4.0f);
345TEST(libsbx_math_vector4, get_w) {
348 const auto result = vector.w();
350 EXPECT_FLOAT_EQ(result, 4.0f);
353TEST(libsbx_math_vector4, set_w) {
358 EXPECT_FLOAT_EQ(vector.w(), 5.0f);
361TEST(libsbx_math_vector4, hash) {
365 EXPECT_EQ(std::hash<sbx::math::vector4>{}(first), std::hash<sbx::math::vector4>{}(second));
368TEST(libsbx_math_vector4, formatting) {
371 auto formatted = fmt::format(
"{}", float_vector);
373 EXPECT_STREQ(formatted.c_str(),
"{x: 1.00, y: 2.00, z: 3.00, w: 4.00}");
377 formatted = fmt::format(
"{}", int_vector);
379 EXPECT_STREQ(formatted.c_str(),
"{x: 1, y: 2, z: 3, w: 4}");
382TEST(libsbx_math_vector4, serialize) {
385 const auto serialized = YAML::Node{vector};
387 EXPECT_FLOAT_EQ(serialized[
"x"].as<std::float_t>(), 1.0f);
388 EXPECT_FLOAT_EQ(serialized[
"y"].as<std::float_t>(), 2.0f);
389 EXPECT_FLOAT_EQ(serialized[
"z"].as<std::float_t>(), 3.0f);
390 EXPECT_FLOAT_EQ(serialized[
"w"].as<std::float_t>(), 4.0f);
392 auto steam = std::stringstream{};
396 EXPECT_STREQ(steam.str().c_str(),
"{x: 1, y: 2, z: 3, w: 4}");
399TEST(libsbx_math_vector4, deserialize) {
400 const auto node = YAML::Load(
"{x: 1, y: 2, z: 3, w: 4}");
404 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
405 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
406 EXPECT_FLOAT_EQ(vector.z(), 3.0f);
407 EXPECT_FLOAT_EQ(vector.w(), 4.0f);
Definition: vector3.hpp:22
Definition: vector4.hpp:22
Definition: vector.hpp:19