summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/geometry/test/algorithms/convert.cpp
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/convert.cpp
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/convert.cpp')
-rw-r--r--src/boost/libs/geometry/test/algorithms/convert.cpp338
1 files changed, 338 insertions, 0 deletions
diff --git a/src/boost/libs/geometry/test/algorithms/convert.cpp b/src/boost/libs/geometry/test/algorithms/convert.cpp
new file mode 100644
index 00000000..a2758832
--- /dev/null
+++ b/src/boost/libs/geometry/test/algorithms/convert.cpp
@@ -0,0 +1,338 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Unit Test
+
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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_convert.hpp>
+
+
+
+template <typename Point1, typename Point2>
+void test_mixed_point_types()
+{
+ // Point
+ test_mixed_identical_result<Point1, Point2>("POINT(1 2)");
+
+ // Box
+ test_mixed_identical_result
+ <
+ bg::model::box<Point1>,
+ bg::model::box<Point2>
+ >
+ ("POLYGON((1 2,1 4,3 4,3 2,1 2))");
+
+ test_mixed_identical_result
+ <
+ bg::model::segment<Point1>,
+ bg::model::segment<Point2>
+ >
+ ("LINESTRING(1 1,2 2)");
+
+ // Linestring
+ test_mixed_identical_result
+ <
+ bg::model::linestring<Point1>,
+ bg::model::linestring<Point2>
+ >
+ ("LINESTRING(1 1,2 2)");
+
+ // Ring
+ test_mixed_identical_result
+ <
+ bg::model::ring<Point1>,
+ bg::model::ring<Point2>
+ >
+ ("POLYGON((1 1,2 2,3 0,1 1))");
+
+ test_mixed_reversible_result
+ <
+ bg::model::ring<Point1, true>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,3 0,2 2,1 1))"
+ );
+
+ test_mixed
+ <
+ bg::model::ring<Point1, true, true>,
+ bg::model::ring<Point2, true, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,2 2,3 0))",
+ 3
+ );
+
+ test_mixed
+ <
+ bg::model::ring<Point1, true, false>,
+ bg::model::ring<Point2, true, true>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0))",
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ 4
+ );
+
+ // Polygon
+ test_mixed_reversible_result
+ <
+ bg::model::polygon<Point1, true>,
+ bg::model::polygon<Point2, false>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,2 4,3 2,1 1))"
+ );
+
+ test_mixed
+ <
+ bg::model::polygon<Point1>,
+ bg::model::polygon<Point2, false, false>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,2 4,3 2,1 1))",
+ 7 // WKT is closed, polygon is open
+ );
+ // (polygon uses ring, so other tests omitted here)
+
+ // Combinations:
+ // ring <-> polygon
+ test_mixed_identical_result
+ <
+ bg::model::polygon<Point1>,
+ bg::model::ring<Point2>
+ >
+ ("POLYGON((1 1,2 2,3 0,1 1))");
+
+ test_mixed_reversible_result
+ <
+ bg::model::polygon<Point1, true>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "POLYGON((1 1,2 2,3 0,1 1))",
+ "POLYGON((1 1,3 0,2 2,1 1))"
+ );
+
+ // Any hole will be omitted going from polygon to ring
+ test_mixed
+ <
+ bg::model::polygon<Point1>,
+ bg::model::ring<Point2>
+ >
+ (
+ "POLYGON((0 0,0 5,5 5,5 0,0 0),(1 1,3 2,2 4,1 1))",
+ "POLYGON((0 0,0 5,5 5,5 0,0 0))",
+ 5
+ );
+
+ // point -> box
+ test_mixed
+ <
+ Point1,
+ bg::model::box<Point2>
+ >
+ (
+ "POINT(0 0)",
+ "POLYGON((0 0,0 0,0 0,0 0,0 0))",
+ 4
+ );
+
+ // segment -> line
+ test_mixed
+ <
+ bg::model::segment<Point1>,
+ bg::model::linestring<Point2>
+ >
+ (
+ "LINESTRING(0 0,1 1)",
+ "LINESTRING(0 0,1 1)",
+ 2
+ );
+
+ // box -> ring ( <- is NYI)
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))",
+ 5
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2,0 0))",
+ 5
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, true, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0))",
+ 4
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::ring<Point2, false, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2))",
+ 4
+ );
+
+ // box -> polygon ( <- is NYI)
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))",
+ 5
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2,0 0))",
+ 5
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, true, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,0 2,2 2,2 0,0 0))",
+ 4 // WKT is closed, polygon is open
+ );
+
+ test_mixed
+ <
+ bg::model::box<Point1>,
+ bg::model::polygon<Point2, false, false>
+ >
+ (
+ "BOX(0 0,2 2)",
+ "POLYGON((0 0,2 0,2 2,0 2,0 0))",
+ 4 // WKT is closed, polygon is open
+ );
+}
+
+template <typename Point1, typename Point2>
+void test_mixed_point_types_3d()
+{
+ // Point
+ test_mixed_identical_result<Point1, Point2>("POINT(1 2 3)");
+
+ test_mixed_identical_result
+ <
+ bg::model::segment<Point1>,
+ bg::model::segment<Point2>
+ >
+ ("LINESTRING(1 2 3,4 5 6)");
+
+ // Linestring
+ test_mixed_identical_result
+ <
+ bg::model::linestring<Point1>,
+ bg::model::linestring<Point2>
+ >
+ ("LINESTRING(1 2 3,4 5 6,7 8 9)");
+
+ // segment -> line
+ test_mixed
+ <
+ bg::model::segment<Point1>,
+ bg::model::linestring<Point2>
+ >
+ (
+ "LINESTRING(1 2 3,4 5 6)",
+ "LINESTRING(1 2 3,4 5 6)",
+ 2
+ );
+}
+
+
+
+template <typename Point1, typename Point2>
+void test_mixed_types()
+{
+ test_mixed_point_types<Point1, Point2>();
+ test_mixed_point_types<Point2, Point1>();
+}
+
+
+template <typename Point1, typename Point2>
+void test_mixed_types_3d()
+{
+ test_mixed_point_types_3d<Point1, Point2>();
+ test_mixed_point_types_3d<Point2, Point1>();
+}
+
+void test_array()
+{
+ int a[2] = {1, 2};
+ int b[2];
+ bg::convert(a, b);
+ BOOST_CHECK_EQUAL(b[0], 1);
+ BOOST_CHECK_EQUAL(b[1], 2);
+}
+
+int test_main(int, char* [])
+{
+ test_mixed_types
+ <
+ bg::model::point<int, 2, bg::cs::cartesian>,
+ bg::model::point<double, 2, bg::cs::cartesian>
+ >();
+ test_mixed_types
+ <
+ boost::tuple<float, float>,
+ bg::model::point<float, 2, bg::cs::cartesian>
+ >();
+ test_mixed_types_3d
+ <
+ boost::tuple<double, double, double>,
+ bg::model::point<double, 3, bg::cs::cartesian>
+ >();
+
+ test_array();
+ return 0;
+}