diff --git a/tests/sources/test_vector4_cast.cpp b/tests/sources/test_vector4_cast.cpp new file mode 100644 index 0000000..03582a4 --- /dev/null +++ b/tests/sources/test_vector4_cast.cpp @@ -0,0 +1,74 @@ +//////////////////////////////////////////////////////////////////////////////// +// The MIT License (MIT) +// +// Copyright (c) 2025 Nicholas Frechette & Realtime Math contributors +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//////////////////////////////////////////////////////////////////////////////// + +#include "catch2.impl.h" + +#include +#include +#include +#include + +using namespace rtm; + +TEST_CASE("vector4f math cast", "[math][vector4]") +{ + const vector4f src = vector_set(-2.65F, 2.996113F, 0.68123521F, -5.9182F); + const vector4d dst = vector_cast(src); + CHECK(scalar_near_equal(vector_get_x(dst), -2.65, 1.0E-6)); + CHECK(scalar_near_equal(vector_get_y(dst), 2.996113, 1.0E-6)); + CHECK(scalar_near_equal(vector_get_z(dst), 0.68123521, 1.0E-6)); + CHECK(scalar_near_equal(vector_get_w(dst), -5.9182, 1.0E-6)); + + const vector4f large_values = vector_set(1073741824.5F, 1073741824.5F, -1073741824.5F, -1073741824.5F); + CHECK(float(vector_get_x(vector_floor(large_values))) == scalar_floor(float(vector_get_x(large_values)))); + CHECK(float(vector_get_y(vector_floor(large_values))) == scalar_floor(float(vector_get_y(large_values)))); + CHECK(float(vector_get_z(vector_floor(large_values))) == scalar_floor(float(vector_get_z(large_values)))); + CHECK(float(vector_get_w(vector_floor(large_values))) == scalar_floor(float(vector_get_w(large_values)))); + + CHECK(float(vector_get_x(vector_ceil(large_values))) == scalar_ceil(float(vector_get_x(large_values)))); + CHECK(float(vector_get_y(vector_ceil(large_values))) == scalar_ceil(float(vector_get_y(large_values)))); + CHECK(float(vector_get_z(vector_ceil(large_values))) == scalar_ceil(float(vector_get_z(large_values)))); + CHECK(float(vector_get_w(vector_ceil(large_values))) == scalar_ceil(float(vector_get_w(large_values)))); +} + +TEST_CASE("vector4d math cast", "[math][vector4]") +{ + const vector4d src = vector_set(-2.65, 2.996113, 0.68123521, -5.9182); + const vector4f dst = vector_cast(src); + CHECK(scalar_near_equal(vector_get_x(dst), -2.65F, 1.0E-6F)); + CHECK(scalar_near_equal(vector_get_y(dst), 2.996113F, 1.0E-6F)); + CHECK(scalar_near_equal(vector_get_z(dst), 0.68123521F, 1.0E-6F)); + CHECK(scalar_near_equal(vector_get_w(dst), -5.9182F, 1.0E-6F)); + + const vector4d large_values = vector_set(36028797018963968.5, 36028797018963968.5, -36028797018963968.5, -36028797018963968.5); + CHECK(double(vector_get_x(vector_floor(large_values))) == scalar_floor(double(vector_get_x(large_values)))); + CHECK(double(vector_get_y(vector_floor(large_values))) == scalar_floor(double(vector_get_y(large_values)))); + CHECK(double(vector_get_z(vector_floor(large_values))) == scalar_floor(double(vector_get_z(large_values)))); + CHECK(double(vector_get_w(vector_floor(large_values))) == scalar_floor(double(vector_get_w(large_values)))); + + CHECK(double(vector_get_x(vector_ceil(large_values))) == scalar_ceil(double(vector_get_x(large_values)))); + CHECK(double(vector_get_y(vector_ceil(large_values))) == scalar_ceil(double(vector_get_y(large_values)))); + CHECK(double(vector_get_z(vector_ceil(large_values))) == scalar_ceil(double(vector_get_z(large_values)))); + CHECK(double(vector_get_w(vector_ceil(large_values))) == scalar_ceil(double(vector_get_w(large_values)))); +} diff --git a/tests/sources/test_vector4_impl.h b/tests/sources/test_vector4_impl.h index 8927e06..1140bcc 100644 --- a/tests/sources/test_vector4_impl.h +++ b/tests/sources/test_vector4_impl.h @@ -25,17 +25,11 @@ // SOFTWARE. //////////////////////////////////////////////////////////////////////////////// -#include "catch2.impl.h" - #include -#include -#include -#include -#include -#include -#include -#include -#include + +// cpp files that include this header must include the vector header they wish to use +//#include +//#include #include #include @@ -44,16 +38,7 @@ using namespace rtm; template -inline const FloatType* vector_as_float_ptr_raw(const Vector4Type& input); - -template<> -inline const float* vector_as_float_ptr_raw(const vector4f& input) -{ - return vector_to_pointer(input); -} - -template<> -inline const double* vector_as_float_ptr_raw(const vector4d& input) +inline const FloatType* vector_as_float_ptr_raw(const Vector4Type& input) { return vector_to_pointer(input); } diff --git a/tests/sources/test_vector4d.cpp b/tests/sources/test_vector4d.cpp index 829e83e..f65658f 100644 --- a/tests/sources/test_vector4d.cpp +++ b/tests/sources/test_vector4d.cpp @@ -23,6 +23,13 @@ // SOFTWARE. //////////////////////////////////////////////////////////////////////////////// +#include "catch2.impl.h" + +#include +#include +#include +#include + #include "test_vector4_impl.h" TEST_CASE("vector4d math get/set", "[math][vector4]") @@ -48,22 +55,4 @@ TEST_CASE("vector4d math logical", "[math][vector4]") TEST_CASE("vector4d math misc", "[math][vector4]") { test_vector4_impl(1.0E-9); - - const vector4d src = vector_set(-2.65, 2.996113, 0.68123521, -5.9182); - const vector4f dst = vector_cast(src); - CHECK(scalar_near_equal(vector_get_x(dst), -2.65F, 1.0E-6F)); - CHECK(scalar_near_equal(vector_get_y(dst), 2.996113F, 1.0E-6F)); - CHECK(scalar_near_equal(vector_get_z(dst), 0.68123521F, 1.0E-6F)); - CHECK(scalar_near_equal(vector_get_w(dst), -5.9182F, 1.0E-6F)); - - const vector4d large_values = vector_set(36028797018963968.5, 36028797018963968.5, -36028797018963968.5, -36028797018963968.5); - CHECK(double(vector_get_x(vector_floor(large_values))) == scalar_floor(double(vector_get_x(large_values)))); - CHECK(double(vector_get_y(vector_floor(large_values))) == scalar_floor(double(vector_get_y(large_values)))); - CHECK(double(vector_get_z(vector_floor(large_values))) == scalar_floor(double(vector_get_z(large_values)))); - CHECK(double(vector_get_w(vector_floor(large_values))) == scalar_floor(double(vector_get_w(large_values)))); - - CHECK(double(vector_get_x(vector_ceil(large_values))) == scalar_ceil(double(vector_get_x(large_values)))); - CHECK(double(vector_get_y(vector_ceil(large_values))) == scalar_ceil(double(vector_get_y(large_values)))); - CHECK(double(vector_get_z(vector_ceil(large_values))) == scalar_ceil(double(vector_get_z(large_values)))); - CHECK(double(vector_get_w(vector_ceil(large_values))) == scalar_ceil(double(vector_get_w(large_values)))); } diff --git a/tests/sources/test_vector4f.cpp b/tests/sources/test_vector4f.cpp index 8206b70..7452901 100644 --- a/tests/sources/test_vector4f.cpp +++ b/tests/sources/test_vector4f.cpp @@ -23,6 +23,13 @@ // SOFTWARE. //////////////////////////////////////////////////////////////////////////////// +#include "catch2.impl.h" + +#include +#include +#include +#include + #include "test_vector4_impl.h" TEST_CASE("vector4f math get/set", "[math][vector4]") @@ -66,22 +73,4 @@ TEST_CASE("vector4f math misc", "[math][vector4]") #endif test_vector4_impl(threshold); - - const vector4f src = vector_set(-2.65F, 2.996113F, 0.68123521F, -5.9182F); - const vector4d dst = vector_cast(src); - CHECK(scalar_near_equal(vector_get_x(dst), -2.65, 1.0E-6)); - CHECK(scalar_near_equal(vector_get_y(dst), 2.996113, 1.0E-6)); - CHECK(scalar_near_equal(vector_get_z(dst), 0.68123521, 1.0E-6)); - CHECK(scalar_near_equal(vector_get_w(dst), -5.9182, 1.0E-6)); - - const vector4f large_values = vector_set(1073741824.5F, 1073741824.5F, -1073741824.5F, -1073741824.5F); - CHECK(float(vector_get_x(vector_floor(large_values))) == scalar_floor(float(vector_get_x(large_values)))); - CHECK(float(vector_get_y(vector_floor(large_values))) == scalar_floor(float(vector_get_y(large_values)))); - CHECK(float(vector_get_z(vector_floor(large_values))) == scalar_floor(float(vector_get_z(large_values)))); - CHECK(float(vector_get_w(vector_floor(large_values))) == scalar_floor(float(vector_get_w(large_values)))); - - CHECK(float(vector_get_x(vector_ceil(large_values))) == scalar_ceil(float(vector_get_x(large_values)))); - CHECK(float(vector_get_y(vector_ceil(large_values))) == scalar_ceil(float(vector_get_y(large_values)))); - CHECK(float(vector_get_z(vector_ceil(large_values))) == scalar_ceil(float(vector_get_z(large_values)))); - CHECK(float(vector_get_w(vector_ceil(large_values))) == scalar_ceil(float(vector_get_w(large_values)))); }