1#ifndef LIBSBX_MATH_TESTS_VECTOR2_TESTS_HPP_
2#define LIBSBX_MATH_TESTS_VECTOR2_TESTS_HPP_
6#include <gtest/gtest.h>
8#include <libsbx/math/vector2.hpp>
10TEST(libsbx_math_vector2, zero) {
11 const auto vector = sbx::math::vector2::zero;
13 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
14 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
17TEST(libsbx_math_vector2, one) {
18 const auto vector = sbx::math::vector2::one;
20 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
21 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
24TEST(libsbx_math_vector2, default_constructor) {
27 EXPECT_FLOAT_EQ(vector.x(), 0.0f);
28 EXPECT_FLOAT_EQ(vector.y(), 0.0f);
31TEST(libsbx_math_vector2, base_constructor) {
35 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
36 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
39TEST(libsbx_math_vector2, single_value_constructor) {
42 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
43 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
46TEST(libsbx_math_vector2, multi_value_constructor) {
49 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
50 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
53TEST(libsbx_math_vector2, copy_constructor) {
55 const auto other = vector;
57 EXPECT_FLOAT_EQ(other.x(), 1.0f);
58 EXPECT_FLOAT_EQ(other.y(), 2.0f);
61TEST(libsbx_math_vector2, move_constructor) {
63 const auto other = std::move(vector);
65 EXPECT_FLOAT_EQ(other.x(), 1.0f);
66 EXPECT_FLOAT_EQ(other.y(), 2.0f);
69TEST(libsbx_math_vector2, copy_assignment) {
74 EXPECT_FLOAT_EQ(other.x(), 1.0f);
75 EXPECT_FLOAT_EQ(other.y(), 2.0f);
78TEST(libsbx_math_vector2, move_assignment) {
81 other = std::move(vector);
83 EXPECT_FLOAT_EQ(other.x(), 1.0f);
84 EXPECT_FLOAT_EQ(other.y(), 2.0f);
87TEST(libsbx_math_vector2, equality) {
91 EXPECT_TRUE(lhs == rhs);
92 EXPECT_FALSE(lhs != rhs);
95TEST(libsbx_math_vector2, inequality) {
99 EXPECT_TRUE(lhs != rhs);
100 EXPECT_FALSE(lhs == rhs);
103TEST(libsbx_math_vector2, addition_assignment) {
107 EXPECT_FLOAT_EQ(vector.x(), 3.0f);
108 EXPECT_FLOAT_EQ(vector.y(), 3.0f);
111TEST(libsbx_math_vector2, subtraction_assignment) {
115 EXPECT_FLOAT_EQ(vector.x(), -1.0f);
116 EXPECT_FLOAT_EQ(vector.y(), 1.0f);
119TEST(libsbx_math_vector2, multiplication_assignment) {
123 EXPECT_FLOAT_EQ(vector.x(), 2.0f);
124 EXPECT_FLOAT_EQ(vector.y(), 4.0f);
127TEST(libsbx_math_vector2, division_assignment) {
131 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
132 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
135TEST(libsbx_math_vector2, addition) {
138 const auto result = lhs + rhs;
140 EXPECT_FLOAT_EQ(result.x(), 3.0f);
141 EXPECT_FLOAT_EQ(result.y(), 3.0f);
144TEST(libsbx_math_vector2, subtraction) {
147 const auto result = lhs - rhs;
149 EXPECT_FLOAT_EQ(result.x(), -1.0f);
150 EXPECT_FLOAT_EQ(result.y(), 1.0f);
153TEST(libsbx_math_vector2, multiplication) {
156 const auto result = lhs * rhs;
158 EXPECT_FLOAT_EQ(result.x(), 2.0f);
159 EXPECT_FLOAT_EQ(result.y(), 4.0f);
162TEST(libsbx_math_vector2, division) {
165 const auto result = lhs / rhs;
167 EXPECT_FLOAT_EQ(result.x(), 1.0f);
168 EXPECT_FLOAT_EQ(result.y(), 2.0f);
171TEST(libsbx_math_vector2, negation) {
173 const auto result = -vector;
175 EXPECT_FLOAT_EQ(result.x(), -1.0f);
176 EXPECT_FLOAT_EQ(result.y(), -2.0f);
179TEST(libsbx_math_vector2, dot) {
182 const auto result = sbx::math::vector2::dot(lhs, rhs);
184 EXPECT_FLOAT_EQ(result, 4.0f);
187TEST(libsbx_math_vector2, normalized) {
189 const auto result = sbx::math::vector2::normalized(vector);
191 EXPECT_FLOAT_EQ(result.x(), 1.0f / std::sqrt(5.0f));
192 EXPECT_FLOAT_EQ(result.y(), 2.0f / std::sqrt(5.0f));
195TEST(libsbx_math_vector2, length_squared) {
197 const auto result = vector.length_squared();
199 EXPECT_FLOAT_EQ(result, 5.0f);
202TEST(libsbx_math_vector2, length) {
204 const auto result = vector.length();
206 EXPECT_FLOAT_EQ(result, std::sqrt(5.0f));
209TEST(libsbx_math_vector2, normalize) {
213 EXPECT_FLOAT_EQ(vector.x(), 1.0f / std::sqrt(5.0f));
214 EXPECT_FLOAT_EQ(vector.y(), 2.0f / std::sqrt(5.0f));
217TEST(libsbx_math_vector2, get_x) {
219 const auto result = vector.x();
221 EXPECT_FLOAT_EQ(result, 1.0f);
224TEST(libsbx_math_vector2, set_x) {
228 EXPECT_FLOAT_EQ(vector.x(), 3.0f);
229 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
232TEST(libsbx_math_vector2, get_y) {
234 const auto result = vector.y();
236 EXPECT_FLOAT_EQ(result, 2.0f);
239TEST(libsbx_math_vector2, set_y) {
243 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
244 EXPECT_FLOAT_EQ(vector.y(), 3.0f);
247TEST(libsbx_math_vector2, hash) {
251 EXPECT_EQ(std::hash<sbx::math::vector2>{}(first), std::hash<sbx::math::vector2>{}(second));
254TEST(libsbx_math_vector2, formatting) {
257 auto formatted = fmt::format(
"{}", float_vector);
259 EXPECT_STREQ(formatted.c_str(),
"{x: 1.00, y: 2.00}");
263 formatted = fmt::format(
"{}", int_vector);
265 EXPECT_STREQ(formatted.c_str(),
"{x: 1, y: 2}");
268TEST(libsbx_math_vector2, serialize) {
271 const auto serialized = YAML::Node{vector};
273 EXPECT_FLOAT_EQ(serialized[
"x"].as<std::float_t>(), 1.0f);
274 EXPECT_FLOAT_EQ(serialized[
"y"].as<std::float_t>(), 2.0f);
276 auto steam = std::stringstream{};
280 EXPECT_STREQ(steam.str().c_str(),
"{x: 1, y: 2}");
283TEST(libsbx_math_vector2, deserialize) {
284 const auto node = YAML::Load(
"{x: 1, y: 2}");
288 EXPECT_FLOAT_EQ(vector.x(), 1.0f);
289 EXPECT_FLOAT_EQ(vector.y(), 2.0f);
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: vector.hpp:19