diff --git a/test/util/Jamfile b/test/util/Jamfile index 808897af5..ede6aa2b4 100644 --- a/test/util/Jamfile +++ b/test/util/Jamfile @@ -4,8 +4,8 @@ # Copyright (c) 2008-2015 Bruno Lalande, Paris, France. # Copyright (c) 2009-2015 Mateusz Loskot, London, UK. # -# This file was modified by Oracle on 2014-2021. -# Modifications copyright (c) 2014-2021, Oracle and/or its affiliates. +# This file was modified by Oracle on 2014-2022. +# Modifications copyright (c) 2014-2022, Oracle and/or its affiliates. # # Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle # Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -16,16 +16,17 @@ test-suite boost-geometry-util : - [ run algorithm.cpp : : : : util_algorithm ] - [ run calculation_type.cpp : : : : util_calculation_type ] - [ run for_each_coordinate.cpp : : : : util_for_each_coordinate ] - [ run math_abs.cpp : : : : util_math_abs ] - [ run math_equals.cpp : : : : util_math_equals ] - [ run math_sqrt.cpp : : : : util_math_sqrt ] - [ run promote_integral.cpp : : : : util_promote_integral ] - [ run range.cpp : : : : util_range ] - [ run rational.cpp : : : : util_rational ] - [ run select_most_precise.cpp : : : : util_select_most_precise ] - [ run tuples.cpp : : : : util_tuples ] - [ run write_dsv.cpp : : : : util_write_dsv ] + [ run algorithm.cpp : : : : util_algorithm ] + [ run calculation_type.cpp : : : : util_calculation_type ] + [ run for_each_coordinate.cpp : : : : util_for_each_coordinate ] + [ run math_abs.cpp : : : : util_math_abs ] + [ run math_equals.cpp : : : : util_math_equals ] + [ run math_sqrt.cpp : : : : util_math_sqrt ] + [ run math_normalize_spheroidal.cpp : : : : util_math_normalize_spheroidal ] + [ run promote_integral.cpp : : : : util_promote_integral ] + [ run range.cpp : : : : util_range ] + [ run rational.cpp : : : : util_rational ] + [ run select_most_precise.cpp : : : : util_select_most_precise ] + [ run tuples.cpp : : : : util_tuples ] + [ run write_dsv.cpp : : : : util_write_dsv ] ; diff --git a/test/util/math_normalize_spheroidal.cpp b/test/util/math_normalize_spheroidal.cpp new file mode 100644 index 000000000..2f8f7ebee --- /dev/null +++ b/test/util/math_normalize_spheroidal.cpp @@ -0,0 +1,91 @@ +// Boost.Geometry +// Unit Test + +// Copyright (c) 2022 Oracle and/or its affiliates. + +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#include +#include + +#include + +#include +#include +#include +#include + + +namespace bgm = bg::math; + +template ::has_quiet_NaN, int> = 0> +void test_equals(T const& v, T const& r) +{ + bool const check = bg::math::equals(v, r) || (std::isnan(v) && std::isnan(r)); + BOOST_CHECK_MESSAGE(check, v << " different than " << r); +} + +template ::has_quiet_NaN, int> = 0> +void test_equals(T const& v, T const& r) +{ + bool const check = bg::math::equals(v, r); + BOOST_CHECK_MESSAGE(check, v << " different than " << r); +} + +template +void test_one(T lon, T lat, T const& res_lon, T const& res_lat) +{ + bg::math::normalize_spheroidal_coordinates(lon, lat); + test_equals(lon, res_lon); + test_equals(lat, res_lat); +} + +template +void test_box(T lon1, T lat1, T lon2, T lat2, + T const& res_lon1, T const& res_lat1, T const& res_lon2, T const& res_lat2) +{ + bg::math::normalize_spheroidal_box_coordinates(lon1, lat1, lon2, lat2); + test_equals(lon1, res_lon1); + test_equals(lat1, res_lat1); + test_equals(lon2, res_lon2); + test_equals(lat2, res_lat2); +} + +template +void test_all() +{ + test_one(270, 0, -90, 0); + + test_one(-180, 10, 180, 10); + test_one(-180, -90, 0, -90); + + if (BOOST_GEOMETRY_CONDITION(std::numeric_limits::has_quiet_NaN)) + { + T nan = std::numeric_limits::quiet_NaN(); + test_one(nan, 10, nan, 10); + test_one(10, nan, 10, nan); + test_one(nan, nan, nan, nan); + + test_box(nan, 10, 20, 20, nan, 10, 20, 20); + test_box(10, nan, 20, 20, 10, nan, 20, 20); + test_box(10, 10, nan, 20, 10, 10, nan, 20); + test_box(10, 10, 20, nan, 10, 10, 20, nan); + + test_box(nan, 10, 270, 20, nan, 10, -90, 20); + test_box(270, 10, nan, 20, -90, 10, nan, 20); + } +} + +int test_main(int, char* []) +{ + test_all(); + test_all(); + test_all(); + + return 0; +}