sandbox
Loading...
Searching...
No Matches
vector2_tests.hpp
1#ifndef LIBSBX_MATH_TESTS_VECTOR2_TESTS_HPP_
2#define LIBSBX_MATH_TESTS_VECTOR2_TESTS_HPP_
3
4#include <sstream>
5
6#include <gtest/gtest.h>
7
8#include <libsbx/math/vector2.hpp>
9
10TEST(libsbx_math_vector2, zero) {
11 const auto vector = sbx::math::vector2::zero;
12
13 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
14 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
15}
16
17TEST(libsbx_math_vector2, one) {
18 const auto vector = sbx::math::vector2::one;
19
20 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
21 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
22}
23
24TEST(libsbx_math_vector2, default_constructor) {
25 const auto vector = sbx::math::vector2{};
26
27 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
28 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
29}
30
31TEST(libsbx_math_vector2, base_constructor) {
33 const auto vector = sbx::math::vector2{base};
34
35 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
36 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
37}
38
39TEST(libsbx_math_vector2, single_value_constructor) {
40 const auto vector = sbx::math::vector2{1};
41
42 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
43 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
44}
45
46TEST(libsbx_math_vector2, multi_value_constructor) {
47 const auto vector = sbx::math::vector2{1, 2};
48
49 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
50 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
51}
52
53TEST(libsbx_math_vector2, copy_constructor) {
54 const auto vector = sbx::math::vector2{1, 2};
55 const auto other = vector;
56
57 EXPECT_FLOAT_EQ(other.x(), 1.0f);
58 EXPECT_FLOAT_EQ(other.y(), 2.0f);
59}
60
61TEST(libsbx_math_vector2, move_constructor) {
62 auto vector = sbx::math::vector2{1, 2};
63 const auto other = std::move(vector);
64
65 EXPECT_FLOAT_EQ(other.x(), 1.0f);
66 EXPECT_FLOAT_EQ(other.y(), 2.0f);
67}
68
69TEST(libsbx_math_vector2, copy_assignment) {
70 const auto vector = sbx::math::vector2{1, 2};
71 auto other = sbx::math::vector2{};
72 other = vector;
73
74 EXPECT_FLOAT_EQ(other.x(), 1.0f);
75 EXPECT_FLOAT_EQ(other.y(), 2.0f);
76}
77
78TEST(libsbx_math_vector2, move_assignment) {
79 auto vector = sbx::math::vector2{1, 2};
80 auto other = sbx::math::vector2{};
81 other = std::move(vector);
82
83 EXPECT_FLOAT_EQ(other.x(), 1.0f);
84 EXPECT_FLOAT_EQ(other.y(), 2.0f);
85}
86
87TEST(libsbx_math_vector2, equality) {
88 const auto lhs = sbx::math::vector2{1, 2};
89 const auto rhs = sbx::math::vector2{1, 2};
90
91 EXPECT_TRUE(lhs == rhs);
92 EXPECT_FALSE(lhs != rhs);
93}
94
95TEST(libsbx_math_vector2, inequality) {
96 const auto lhs = sbx::math::vector2{1, 2};
97 const auto rhs = sbx::math::vector2{2, 1};
98
99 EXPECT_TRUE(lhs != rhs);
100 EXPECT_FALSE(lhs == rhs);
101}
102
103TEST(libsbx_math_vector2, addition_assignment) {
104 auto vector = sbx::math::vector2{1, 2};
105 vector += sbx::math::vector2{2, 1};
106
107 EXPECT_FLOAT_EQ(vector.x(), 3.0f);
108 EXPECT_FLOAT_EQ(vector.y(), 3.0f);
109}
110
111TEST(libsbx_math_vector2, subtraction_assignment) {
112 auto vector = sbx::math::vector2{1, 2};
113 vector -= sbx::math::vector2{2, 1};
114
115 EXPECT_FLOAT_EQ(vector.x(), -1.0f);
116 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
117}
118
119TEST(libsbx_math_vector2, multiplication_assignment) {
120 auto vector = sbx::math::vector2{1, 2};
121 vector *= 2;
122
123 EXPECT_FLOAT_EQ(vector.x(), 2.0f);
124 EXPECT_FLOAT_EQ(vector.y(), 4.0f);
125}
126
127TEST(libsbx_math_vector2, division_assignment) {
128 auto vector = sbx::math::vector2{2, 4};
129 vector /= 2;
130
131 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
132 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
133}
134
135TEST(libsbx_math_vector2, addition) {
136 const auto lhs = sbx::math::vector2{1, 2};
137 const auto rhs = sbx::math::vector2{2, 1};
138 const auto result = lhs + rhs;
139
140 EXPECT_FLOAT_EQ(result.x(), 3.0f);
141 EXPECT_FLOAT_EQ(result.y(), 3.0f);
142}
143
144TEST(libsbx_math_vector2, subtraction) {
145 const auto lhs = sbx::math::vector2{1, 2};
146 const auto rhs = sbx::math::vector2{2, 1};
147 const auto result = lhs - rhs;
148
149 EXPECT_FLOAT_EQ(result.x(), -1.0f);
150 EXPECT_FLOAT_EQ(result.y(), 1.0f);
151}
152
153TEST(libsbx_math_vector2, multiplication) {
154 const auto lhs = sbx::math::vector2{1, 2};
155 const auto rhs = 2;
156 const auto result = lhs * rhs;
157
158 EXPECT_FLOAT_EQ(result.x(), 2.0f);
159 EXPECT_FLOAT_EQ(result.y(), 4.0f);
160}
161
162TEST(libsbx_math_vector2, division) {
163 const auto lhs = sbx::math::vector2{2, 4};
164 const auto rhs = 2;
165 const auto result = lhs / rhs;
166
167 EXPECT_FLOAT_EQ(result.x(), 1.0f);
168 EXPECT_FLOAT_EQ(result.y(), 2.0f);
169}
170
171TEST(libsbx_math_vector2, negation) {
172 const auto vector = sbx::math::vector2{1, 2};
173 const auto result = -vector;
174
175 EXPECT_FLOAT_EQ(result.x(), -1.0f);
176 EXPECT_FLOAT_EQ(result.y(), -2.0f);
177}
178
179TEST(libsbx_math_vector2, dot) {
180 const auto lhs = sbx::math::vector2{1, 2};
181 const auto rhs = sbx::math::vector2{2, 1};
182 const auto result = sbx::math::vector2::dot(lhs, rhs);
183
184 EXPECT_FLOAT_EQ(result, 4.0f);
185}
186
187TEST(libsbx_math_vector2, normalized) {
188 const auto vector = sbx::math::vector2{1, 2};
189 const auto result = sbx::math::vector2::normalized(vector);
190
191 EXPECT_FLOAT_EQ(result.x(), 1.0f / std::sqrt(5.0f));
192 EXPECT_FLOAT_EQ(result.y(), 2.0f / std::sqrt(5.0f));
193}
194
195TEST(libsbx_math_vector2, length_squared) {
196 const auto vector = sbx::math::vector2{1, 2};
197 const auto result = vector.length_squared();
198
199 EXPECT_FLOAT_EQ(result, 5.0f);
200}
201
202TEST(libsbx_math_vector2, length) {
203 const auto vector = sbx::math::vector2{1, 2};
204 const auto result = vector.length();
205
206 EXPECT_FLOAT_EQ(result, std::sqrt(5.0f));
207}
208
209TEST(libsbx_math_vector2, normalize) {
210 auto vector = sbx::math::vector2{1, 2};
211 vector.normalize();
212
213 EXPECT_FLOAT_EQ(vector.x(), 1.0f / std::sqrt(5.0f));
214 EXPECT_FLOAT_EQ(vector.y(), 2.0f / std::sqrt(5.0f));
215}
216
217TEST(libsbx_math_vector2, get_x) {
218 const auto vector = sbx::math::vector2{1, 2};
219 const auto result = vector.x();
220
221 EXPECT_FLOAT_EQ(result, 1.0f);
222}
223
224TEST(libsbx_math_vector2, set_x) {
225 auto vector = sbx::math::vector2{1, 2};
226 vector.x() = 3;
227
228 EXPECT_FLOAT_EQ(vector.x(), 3.0f);
229 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
230}
231
232TEST(libsbx_math_vector2, get_y) {
233 const auto vector = sbx::math::vector2{1, 2};
234 const auto result = vector.y();
235
236 EXPECT_FLOAT_EQ(result, 2.0f);
237}
238
239TEST(libsbx_math_vector2, set_y) {
240 auto vector = sbx::math::vector2{1, 2};
241 vector.y() = 3;
242
243 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
244 EXPECT_FLOAT_EQ(vector.y(), 3.0f);
245}
246
247TEST(libsbx_math_vector2, hash) {
248 const auto first = sbx::math::vector2{1, 2};
249 const auto second = sbx::math::vector2{1, 2};
250
251 EXPECT_EQ(std::hash<sbx::math::vector2>{}(first), std::hash<sbx::math::vector2>{}(second));
252}
253
254TEST(libsbx_math_vector2, formatting) {
255 const auto float_vector = sbx::math::vector2f{1, 2};
256
257 auto formatted = fmt::format("{}", float_vector);
258
259 EXPECT_STREQ(formatted.c_str(), "{x: 1.00, y: 2.00}");
260
261 const auto int_vector = sbx::math::vector2i{1, 2};
262
263 formatted = fmt::format("{}", int_vector);
264
265 EXPECT_STREQ(formatted.c_str(), "{x: 1, y: 2}");
266}
267
268TEST(libsbx_math_vector2, serialize) {
269 const auto vector = sbx::math::vector2{1, 2};
270
271 const auto serialized = YAML::Node{vector};
272
273 EXPECT_FLOAT_EQ(serialized["x"].as<std::float_t>(), 1.0f);
274 EXPECT_FLOAT_EQ(serialized["y"].as<std::float_t>(), 2.0f);
275
276 auto steam = std::stringstream{};
277
278 steam << serialized;
279
280 EXPECT_STREQ(steam.str().c_str(), "{x: 1, y: 2}");
281}
282
283TEST(libsbx_math_vector2, deserialize) {
284 const auto node = YAML::Load("{x: 1, y: 2}");
285
286 const auto vector = node.as<sbx::math::vector2>();
287
288 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
289 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
290}
291
292#endif // LIBSBX_MATH_TESTS_VECTOR2_TESTS_HPP_
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: vector.hpp:19