From 39d0d0683d5efb165dc82b1311215e9be268e728 Mon Sep 17 00:00:00 2001 From: Orange Date: Fri, 22 May 2026 12:35:05 +0300 Subject: [PATCH] improvement --- include/omath/linear_algebra/vector2.hpp | 5 +++ include/omath/linear_algebra/vector3.hpp | 5 +++ include/omath/linear_algebra/vector4.hpp | 5 +++ tests/general/unit_test_vector2.cpp | 32 +++++++++++++++++++ tests/general/unit_test_vector3.cpp | 36 +++++++++++++++++++++ tests/general/unit_test_vector4.cpp | 40 ++++++++++++++++++++++++ 6 files changed, 123 insertions(+) diff --git a/include/omath/linear_algebra/vector2.hpp b/include/omath/linear_algebra/vector2.hpp index 13a08f9..e283d51 100644 --- a/include/omath/linear_algebra/vector2.hpp +++ b/include/omath/linear_algebra/vector2.hpp @@ -171,6 +171,11 @@ namespace omath y = y < static_cast(0) ? -y : y; return *this; } + [[nodiscard("You must use absed vector")]] + constexpr Vector2 abs() const noexcept + { + return Vector2{*this}.abs(); + } [[nodiscard("You must use negated vector")]] constexpr Vector2 operator-() const noexcept diff --git a/include/omath/linear_algebra/vector3.hpp b/include/omath/linear_algebra/vector3.hpp index 4ad5ecc..6dac417 100644 --- a/include/omath/linear_algebra/vector3.hpp +++ b/include/omath/linear_algebra/vector3.hpp @@ -121,6 +121,11 @@ namespace omath return *this; } + [[nodiscard("You must use absed vector")]] + constexpr Vector3 abs() const noexcept + { + return Vector3{*this}.abs(); + } [[nodiscard("You must use squared distance")]] constexpr Type distance_to_sqr(const Vector3& other) const noexcept diff --git a/include/omath/linear_algebra/vector4.hpp b/include/omath/linear_algebra/vector4.hpp index 9978158..576656c 100644 --- a/include/omath/linear_algebra/vector4.hpp +++ b/include/omath/linear_algebra/vector4.hpp @@ -113,6 +113,11 @@ namespace omath return *this; } + [[nodiscard("You must use absed vector")]] + constexpr Vector4 abs() const noexcept + { + return Vector4{*this}.abs(); + } constexpr Vector4& clamp(const Type& min, const Type& max) noexcept { this->x = std::clamp(this->x, min, max); diff --git a/tests/general/unit_test_vector2.cpp b/tests/general/unit_test_vector2.cpp index 2ac830a..91d9e61 100644 --- a/tests/general/unit_test_vector2.cpp +++ b/tests/general/unit_test_vector2.cpp @@ -240,6 +240,38 @@ TEST_F(UnitTestVector2, Abs_ZeroValues) EXPECT_FLOAT_EQ(v3.y, 0.0f); } +TEST_F(UnitTestVector2, Abs_Const_ReturnsAbsoluteCopy) +{ + const Vector2 v3(-1.0f, -2.0f); + const Vector2 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); +} + +TEST_F(UnitTestVector2, Abs_Const_DoesNotMutateSource) +{ + const Vector2 v3(-1.0f, -2.0f); + (void)v3.abs(); + EXPECT_FLOAT_EQ(v3.x, -1.0f); + EXPECT_FLOAT_EQ(v3.y, -2.0f); +} + +TEST_F(UnitTestVector2, Abs_Const_PositiveValues) +{ + const Vector2 v3(1.0f, 2.0f); + const Vector2 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); +} + +TEST_F(UnitTestVector2, Abs_Const_MixedSigns) +{ + const Vector2 v3(-3.5f, 4.5f); + const Vector2 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 3.5f); + EXPECT_FLOAT_EQ(result.y, 4.5f); +} + TEST_F(UnitTestVector2, Sum) { constexpr float sum = Vector2(1.0f, 2.0f).sum(); diff --git a/tests/general/unit_test_vector3.cpp b/tests/general/unit_test_vector3.cpp index 12f9761..158f1c0 100644 --- a/tests/general/unit_test_vector3.cpp +++ b/tests/general/unit_test_vector3.cpp @@ -244,6 +244,42 @@ TEST_F(UnitTestVector3, Abs) EXPECT_FLOAT_EQ(v3.z, 3.0f); } +TEST_F(UnitTestVector3, Abs_Const_ReturnsAbsoluteCopy) +{ + const Vector3 v3(-1.0f, -2.0f, -3.0f); + const Vector3 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); + EXPECT_FLOAT_EQ(result.z, 3.0f); +} + +TEST_F(UnitTestVector3, Abs_Const_DoesNotMutateSource) +{ + const Vector3 v3(-1.0f, -2.0f, -3.0f); + (void)v3.abs(); + EXPECT_FLOAT_EQ(v3.x, -1.0f); + EXPECT_FLOAT_EQ(v3.y, -2.0f); + EXPECT_FLOAT_EQ(v3.z, -3.0f); +} + +TEST_F(UnitTestVector3, Abs_Const_PositiveValues) +{ + const Vector3 v3(1.0f, 2.0f, 3.0f); + const Vector3 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); + EXPECT_FLOAT_EQ(result.z, 3.0f); +} + +TEST_F(UnitTestVector3, Abs_Const_MixedSigns) +{ + const Vector3 v3(-1.5f, 2.5f, -3.5f); + const Vector3 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.5f); + EXPECT_FLOAT_EQ(result.y, 2.5f); + EXPECT_FLOAT_EQ(result.z, 3.5f); +} + TEST_F(UnitTestVector3, Sum) { constexpr auto sum = Vector3(1.0f, 2.0f, 3.0f).sum(); diff --git a/tests/general/unit_test_vector4.cpp b/tests/general/unit_test_vector4.cpp index 69e4ea6..acc2bb3 100644 --- a/tests/general/unit_test_vector4.cpp +++ b/tests/general/unit_test_vector4.cpp @@ -226,6 +226,46 @@ TEST_F(UnitTestVector4, Abs) EXPECT_FLOAT_EQ(v3.w, 4.0f); } +TEST_F(UnitTestVector4, Abs_Const_ReturnsAbsoluteCopy) +{ + const Vector4 v3(-1.0f, -2.0f, -3.0f, -4.0f); + const Vector4 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); + EXPECT_FLOAT_EQ(result.z, 3.0f); + EXPECT_FLOAT_EQ(result.w, 4.0f); +} + +TEST_F(UnitTestVector4, Abs_Const_DoesNotMutateSource) +{ + const Vector4 v3(-1.0f, -2.0f, -3.0f, -4.0f); + (void)v3.abs(); + EXPECT_FLOAT_EQ(v3.x, -1.0f); + EXPECT_FLOAT_EQ(v3.y, -2.0f); + EXPECT_FLOAT_EQ(v3.z, -3.0f); + EXPECT_FLOAT_EQ(v3.w, -4.0f); +} + +TEST_F(UnitTestVector4, Abs_Const_PositiveValues) +{ + const Vector4 v3(1.0f, 2.0f, 3.0f, 4.0f); + const Vector4 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.0f); + EXPECT_FLOAT_EQ(result.y, 2.0f); + EXPECT_FLOAT_EQ(result.z, 3.0f); + EXPECT_FLOAT_EQ(result.w, 4.0f); +} + +TEST_F(UnitTestVector4, Abs_Const_MixedSigns) +{ + const Vector4 v3(-1.5f, 2.5f, -3.5f, 4.5f); + const Vector4 result = v3.abs(); + EXPECT_FLOAT_EQ(result.x, 1.5f); + EXPECT_FLOAT_EQ(result.y, 2.5f); + EXPECT_FLOAT_EQ(result.z, 3.5f); + EXPECT_FLOAT_EQ(result.w, 4.5f); +} + TEST_F(UnitTestVector4, Sum) { constexpr float sum = Vector4(1.0f, 2.0f, 3.0f, 4.0f).sum();