diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/geometry/test/algorithms/length | |
parent | Initial commit. (diff) | |
download | ceph-upstream.tar.xz ceph-upstream.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/geometry/test/algorithms/length')
6 files changed, 346 insertions, 0 deletions
diff --git a/src/boost/libs/geometry/test/algorithms/length/Jamfile.v2 b/src/boost/libs/geometry/test/algorithms/length/Jamfile.v2 new file mode 100644 index 00000000..8fe1bb13 --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/Jamfile.v2 @@ -0,0 +1,17 @@ +# Boost.Geometry (aka GGL, Generic Geometry Library) +# +# Copyright (c) 2016 Oracle and/or its affiliates. +# +# Contributed and/or modified by Vissarion Fisikopoulos, 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) + +test-suite boost-geometry-algorithms-length + : + [ run length.cpp : : : : algorithms_length ] + [ run length_multi.cpp : : : : algorithms_length_multi ] + [ run length_sph.cpp : : : : algorithms_length_sph ] + [ run length_geo.cpp : : : : algorithms_length_geo ] + ; diff --git a/src/boost/libs/geometry/test/algorithms/length/length.cpp b/src/boost/libs/geometry/test/algorithms/length/length.cpp new file mode 100644 index 00000000..11e18d39 --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/length.cpp @@ -0,0 +1,55 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) +// Unit Test + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + +// 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 <algorithms/test_length.hpp> + +#include <boost/geometry/geometries/geometries.hpp> +#include <boost/geometry/geometries/point_xy.hpp> +#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp> + +#include <test_geometries/all_custom_linestring.hpp> +#include <test_geometries/wrapped_boost_array.hpp> + + +template <typename P> +void test_all() +{ + // 3-4-5 triangle + test_geometry<std::pair<P, P> >("LINESTRING(0 0,3 4)", 5); + + // 3-4-5 plus 1-1 + test_geometry<bg::model::linestring<P> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0)); + test_geometry<all_custom_linestring<P> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0)); + test_geometry<test::wrapped_boost_array<P, 3> >("LINESTRING(0 0,3 4,4 3)", 5 + sqrt(2.0)); + + // Geometries with length zero + test_geometry<P>("POINT(0 0)", 0); + test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0); +} + +template <typename P> +void test_empty_input() +{ + test_empty_input(bg::model::linestring<P>()); +} + +int test_main(int, char* []) +{ + test_all<bg::model::d2::point_xy<int> >(); + test_all<bg::model::d2::point_xy<float> >(); + test_all<bg::model::d2::point_xy<double> >(); + +#if defined(HAVE_TTMATH) + test_all<bg::model::d2::point_xy<ttmath_big> >(); +#endif + + // test_empty_input<bg::model::d2::point_xy<int> >(); + + return 0; +} diff --git a/src/boost/libs/geometry/test/algorithms/length/length_geo.cpp b/src/boost/libs/geometry/test/algorithms/length/length_geo.cpp new file mode 100644 index 00000000..66754eaf --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/length_geo.cpp @@ -0,0 +1,121 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) +// Unit Test + +// Copyright (c) 2016 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fisikopoulos, 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 <algorithms/test_length.hpp> +#include <algorithms/length/linestring_cases.hpp> + +#include <boost/geometry/geometries/geometries.hpp> +#include <boost/geometry/geometries/point_xy.hpp> +#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp> + +#include <test_geometries/all_custom_linestring.hpp> +#include <test_geometries/wrapped_boost_array.hpp> + +template <typename P> +struct geo_strategies +{ + // Set radius type, but for integer coordinates we want to have floating + // point radius type + typedef typename bg::promote_floating_point + < + typename bg::coordinate_type<P>::type + >::type rtype; + + typedef bg::srs::spheroid<rtype> stype; + typedef bg::strategy::distance::andoyer<stype> andoyer_type; + typedef bg::strategy::distance::thomas<stype> thomas_type; + typedef bg::strategy::distance::vincenty<stype> vincenty_type; +}; + +template <typename P> +void test_default() //this should use andoyer strategy +{ + for(std::size_t i = 0; i < 2; ++i) + { + test_geometry<bg::model::linestring<P> >(Ls_data_geo[i], + 1116814.237 + 1116152.605); + } + // Geometries with length zero + test_geometry<P>("POINT(0 0)", 0); + test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0); +} + +template <typename P, typename N, typename Strategy> +void test_with_strategy(N exp_length, Strategy strategy) +{ + for(std::size_t i = 0; i < 2; ++i) + { + test_geometry<bg::model::linestring<P> >(Ls_data_geo[i], + exp_length, + strategy); + } + // Geometries with length zero + test_geometry<P>("POINT(0 0)", 0, strategy); + test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0, + strategy); +} + +template <typename P> +void test_andoyer() +{ + typename geo_strategies<P>::andoyer_type andoyer; + test_with_strategy<P>(1116814.237 + 1116152.605, andoyer); +} + +template <typename P> +void test_thomas() +{ + typename geo_strategies<P>::thomas_type thomas; + test_with_strategy<P>(1116825.795 + 1116158.7417, thomas); +} + +template <typename P> +void test_vincenty() +{ + typename geo_strategies<P>::vincenty_type vincenty; + test_with_strategy<P>(1116825.857 + 1116159.144, vincenty); +} + +template <typename P> +void test_all() +{ + test_default<P>(); + test_andoyer<P>(); + test_thomas<P>(); + test_vincenty<P>(); +} + +template <typename P> +void test_empty_input() +{ + test_empty_input(bg::model::linestring<P>()); + test_empty_input(bg::model::multi_linestring<P>()); +} + +int test_main(int, char* []) +{ + // Works only for double(?!) + //test_all<bg::model::d2::point_xy<int, + // bg::cs::geographic<bg::degree> > >(); + //test_all<bg::model::d2::point_xy<float, + // bg::cs::geographic<bg::degree> > >(); + test_all<bg::model::d2::point_xy<double, + bg::cs::geographic<bg::degree> > >(); + +#if defined(HAVE_TTMATH) + test_all<bg::model::d2::point_xy<ttmath_big> >(); +#endif + + //test_empty_input<bg::model::d2::point_xy<double, + // bg::cs::geographic<bg::degree> > >(); + + return 0; +} + diff --git a/src/boost/libs/geometry/test/algorithms/length/length_multi.cpp b/src/boost/libs/geometry/test/algorithms/length/length_multi.cpp new file mode 100644 index 00000000..083349f5 --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/length_multi.cpp @@ -0,0 +1,38 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) +// +// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. +// 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 <algorithms/test_length.hpp> + +#include <boost/geometry/geometries/geometries.hpp> +#include <boost/geometry/geometries/point_xy.hpp> + +template <typename P> +void test_all() +{ + test_geometry<bg::model::multi_linestring<bg::model::linestring<P> > > + ("MULTILINESTRING((0 0,3 4,4 3))", 5 + sqrt(2.0)); +} + +template <typename P> +void test_empty_input() +{ + test_empty_input(bg::model::multi_linestring<P>()); +} + +int test_main( int , char* [] ) +{ + test_all<bg::model::d2::point_xy<double> >(); + +#ifdef HAVE_TTMATH + test_all<bg::model::d2::point_xy<ttmath_big> >(); +#endif + + // test_empty_input<bg::model::d2::point_xy<int> >(); + + return 0; +} diff --git a/src/boost/libs/geometry/test/algorithms/length/length_sph.cpp b/src/boost/libs/geometry/test/algorithms/length/length_sph.cpp new file mode 100644 index 00000000..6b2f8944 --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/length_sph.cpp @@ -0,0 +1,87 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) +// Unit Test + +// Copyright (c) 2016 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fisikopoulos, 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 <algorithms/test_length.hpp> +#include <algorithms/length/linestring_cases.hpp> + +#include <boost/geometry/geometries/geometries.hpp> +#include <boost/geometry/geometries/point_xy.hpp> +#include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp> + +#include <test_geometries/all_custom_linestring.hpp> +#include <test_geometries/wrapped_boost_array.hpp> + +template <typename P> +void test_all_default() //test the default strategy +{ + double const pi = boost::math::constants::pi<double>(); + + for(std::size_t i = 0; i < 2; ++i) + { + test_geometry<bg::model::linestring<P> >(Ls_data_sph[i], 2 * pi); + } + // Geometries with length zero + test_geometry<P>("POINT(0 0)", 0); + test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", 0); +} + +template <typename P> +void test_all_haversine(double const mean_radius) +{ + double const pi = boost::math::constants::pi<double>(); + bg::strategy::distance::haversine<float> haversine_strategy(mean_radius); + + for(std::size_t i = 0; i < 2; ++i) + { + test_geometry<bg::model::linestring<P> >(Ls_data_sph[i], + 2 * pi * mean_radius, + haversine_strategy); + } + // Geometries with length zero + test_geometry<P>("POINT(0 0)", 0, haversine_strategy); + test_geometry<bg::model::polygon<P> >("POLYGON((0 0,0 1,1 1,1 0,0 0))", + 0, haversine_strategy); +} + +template <typename P> +void test_empty_input() +{ + test_empty_input(bg::model::linestring<P>()); + test_empty_input(bg::model::multi_linestring<P>()); +} + +int test_main(int, char* []) +{ + //Earth radius estimation in Km + //(see https://en.wikipedia.org/wiki/Earth_radius) + double const mean_radius = 6371.0; + + test_all_default<bg::model::d2::point_xy<int, + bg::cs::spherical_equatorial<bg::degree> > >(); + test_all_default<bg::model::d2::point_xy<float, + bg::cs::spherical_equatorial<bg::degree> > >(); + test_all_default<bg::model::d2::point_xy<double, + bg::cs::spherical_equatorial<bg::degree> > >(); + + test_all_haversine<bg::model::d2::point_xy<int, + bg::cs::spherical_equatorial<bg::degree> > >(mean_radius); + test_all_haversine<bg::model::d2::point_xy<float, + bg::cs::spherical_equatorial<bg::degree> > >(mean_radius); + test_all_haversine<bg::model::d2::point_xy<double, + bg::cs::spherical_equatorial<bg::degree> > >(mean_radius); + +#if defined(HAVE_TTMATH) + test_all<bg::model::d2::point_xy<ttmath_big> >(); +#endif + + //test_empty_input<bg::model::d2::point_xy<int> >(); + + return 0; +} diff --git a/src/boost/libs/geometry/test/algorithms/length/linestring_cases.hpp b/src/boost/libs/geometry/test/algorithms/length/linestring_cases.hpp new file mode 100644 index 00000000..9c7774f8 --- /dev/null +++ b/src/boost/libs/geometry/test/algorithms/length/linestring_cases.hpp @@ -0,0 +1,28 @@ +// Boost.Geometry +// Unit Test + +// Copyright (c) 2016 Oracle and/or its affiliates. + +// Contributed and/or modified by Vissarion Fysikopoulos, 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) + +#ifndef LINESTRING_CASES_HPP +#define LINESTRING_CASES_HPP + +#include <string> + +static std::string Ls_data_geo[] = {"LINESTRING(0 90,1 80,1 70)", + "LINESTRING(0 90,1 80,1 80,1 80,1 70,1 70)", + "LINESTRING(0 90,1 80,1 79,1 78,1 77,1 76,1 75,1 74,\ + 1 73,1 72,1 71,1 70)"}; + +static std::string Ls_data_sph[] = {"LINESTRING(0 0,180 0,180 180)", + "LINESTRING(0 0,180 0,180 0,180 0,180 180,180 180)", + "LINESTRING(0 0,180 0,180 10,180 20,180 30,180 40,180 50,180 60,\ + 180 70,180 80,180 90,180 100,180 110,180 120,180 130,\ + 180 140,180 150,180 160,180 170,180 180)"}; + +#endif // LINESTRING_CASES_HPP |