summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/geometry/test/algorithms/length
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/geometry/test/algorithms/length
parentInitial commit. (diff)
downloadceph-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')
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/Jamfile.v217
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/length.cpp55
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/length_geo.cpp121
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/length_multi.cpp38
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/length_sph.cpp87
-rw-r--r--src/boost/libs/geometry/test/algorithms/length/linestring_cases.hpp28
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