diff --git a/source/simple/geom/vector.hpp b/source/simple/geom/vector.hpp index 07f5b7e386c7077d53fb1e95bd738d5c867bf5e8..88bdde3237b0a980325451ae904ae29b2c6eb03f 100644 --- a/source/simple/geom/vector.hpp +++ b/source/simple/geom/vector.hpp @@ -431,6 +431,14 @@ SIMPLE_GEOM_VECTOR_DEFINE_COMPARISON_OPERATOR(<=, bool_vector) return *this; } + constexpr vector& trunc() + { + using std::trunc; + for(auto&& coord : raw) + coord = trunc(coord); + return *this; + } + constexpr vector& abs() { using std::abs; @@ -652,6 +660,15 @@ SIMPLE_GEOM_VECTOR_DEFINE_COMPARISON_OPERATOR(<=, bool_vector) return v; } + template <typename C, size_t D, typename O> + [[nodiscard]] + constexpr + vector<C,D,O> trunc(vector<C,D,O> v) + { + v.trunc(); + return v; + } + template <typename C, size_t D, typename O> [[nodiscard]] constexpr diff --git a/unit_tests/point.cpp b/unit_tests/point.cpp index 126809d55a8ad7161694cd345a4ad25a6286177b..4fbda4090a067c04a9517f97bf678778696ac87a 100644 --- a/unit_tests/point.cpp +++ b/unit_tests/point.cpp @@ -344,11 +344,14 @@ void Algorithms() assert( int4(-1, 3, -3, 1) == p3); float4 fp (1.1f, 3.4f, 4.5f, 8.9f); + assert( float4(1.f, 3.f, 4.f, 8.f) == trunc(fp) ); assert( float4(1.f, 3.f, 4.f, 8.f) == floor(fp) ); assert( float4(2.f, 4.f, 5.f, 9.f) == ceil(fp) ); assert( float4(1.f, 3.f, 5.f, 9.f) == round(fp) ); float4 fp2; + (fp2 = fp).trunc(); + assert( float4(1.f, 3.f, 4.f, 8.f) == fp2 ); (fp2 = fp).floor(); assert( float4(1.f, 3.f, 4.f, 8.f) == fp2 ); (fp2 = fp).ceil(); @@ -356,6 +359,21 @@ void Algorithms() (fp2 = fp).round(); assert( float4(1.f, 3.f, 5.f, 9.f) == fp2 ); + fp = float4(1.1f, -3.4f, 4.5f, -8.9f); + assert( float4(1.f, -3.f, 4.f, -8.f) == trunc(fp) ); + assert( float4(1.f, -4.f, 4.f, -9.f) == floor(fp) ); + assert( float4(2.f, -3.f, 5.f, -8.f) == ceil(fp) ); + assert( float4(1.f, -3.f, 5.f, -9.f) == round(fp) ); + + (fp2 = fp).trunc(); + assert( float4(1.f, -3.f, 4.f, -8.f) == fp2 ); + (fp2 = fp).floor(); + assert( float4(1.f, -4.f, 4.f, -9.f) == fp2 ); + (fp2 = fp).ceil(); + assert( float4(2.f, -3.f, 5.f, -8.f) == fp2 ); + (fp2 = fp).round(); + assert( float4(1.f, -3.f, 5.f, -9.f) == fp2 ); + int4 p4 (2, 6, 3, 0); assert( p4.magnitude() == 49); assert( p4.quadrance() == 49);