]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/algorithms/envelope_expand/expand.cpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
4 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
5 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
6 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
8 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
9 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
11 // Use, modification and distribution is subject to the Boost Software License,
12 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
13 // http://www.boost.org/LICENSE_1_0.txt)
15 #include "test_expand.hpp"
18 #include <boost/geometry/algorithms/make.hpp>
20 #include <boost/geometry/geometries/geometries.hpp>
21 #include <boost/geometry/geometries/adapted/c_array.hpp>
22 #include <boost/geometry/geometries/adapted/boost_tuple.hpp>
23 #include <boost/geometry/geometries/adapted/std_pair_as_segment.hpp>
24 #include <test_common/test_point.hpp>
26 BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(cs::cartesian
)
27 BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian
)
30 template <typename Point
>
33 bg::model::box
<Point
> b
= bg::make_inverse
<bg::model::box
<Point
> >();
35 test_expand
<Point
>(b
, "POINT(1 2 5)", "(1,2,5),(1,2,5)");
36 test_expand
<Point
>(b
, "POINT(3 4 6)", "(1,2,5),(3,4,6)");
38 test_expand
<Point
>(b
, "POINT(4 4 5)", "(1,2,5),(4,4,6)");
39 test_expand
<Point
>(b
, "POINT(4 5 5)", "(1,2,5),(4,5,6)");
40 test_expand
<Point
>(b
, "POINT(10 10 4)", "(1,2,4),(10,10,6)");
41 test_expand
<Point
>(b
, "POINT(9 9 4)", "(1,2,4),(10,10,6)");
43 test_expand
<Point
>(b
, "POINT(0 2 7)", "(0,2,4),(10,10,7)");
44 test_expand
<Point
>(b
, "POINT(0 0 7)", "(0,0,4),(10,10,7)");
45 test_expand
<Point
>(b
, "POINT(-1 -1 5)", "(-1,-1,4),(10,10,7)");
46 test_expand
<Point
>(b
, "POINT(0 0 5)", "(-1,-1,4),(10,10,7)");
48 test_expand
<Point
>(b
, "POINT(15 -1 0)", "(-1,-1,0),(15,10,7)");
49 test_expand
<Point
>(b
, "POINT(-1 15 10)", "(-1,-1,0),(15,15,10)");
52 template <typename Point
>
55 typedef bg::model::box
<Point
> box_type
;
56 box_type b
= bg::make_inverse
<box_type
>();
58 test_expand
<box_type
>(b
, "BOX(0 2 5,4 4 6)", "(0,2,5),(4,4,6)");
59 test_expand
<box_type
>(b
, "BOX(0 1 5,4 6 6)", "(0,1,5),(4,6,6)");
60 test_expand
<box_type
>(b
, "BOX(-1 -1 6,10 10 5)", "(-1,-1,5),(10,10,6)");
61 test_expand
<box_type
>(b
, "BOX(3 3 6,3 3 5)", "(-1,-1,5),(10,10,6)");
63 test_expand
<box_type
>(b
, "BOX(3 15 7,-1 3 4)", "(-1,-1,4),(10,15,7)");
64 test_expand
<box_type
>(b
, "BOX(-15 3 7,3 20 4)", "(-15,-1,4),(10,20,7)");
65 test_expand
<box_type
>(b
, "BOX(3 -20 8,3 20 3)", "(-15,-20,3),(10,20,8)");
66 test_expand
<box_type
>(b
, "BOX(-20 3 8,20 3 3)", "(-20,-20,3),(20,20,8)");
78 template <typename Point
>
81 typedef bg::model::box
<Point
> box_type
;
82 typedef std::pair
<Point
, Point
> segment_type
;
84 box_type b
= bg::make_inverse
<box_type
>();
86 test_expand
<box_type
>(b
, "BOX(1 1,2 2)", "(1,1),(2,2)");
88 // Test an 'incorrect' box -> should also correctly update the bbox
89 test_expand
<box_type
>(b
, "BOX(3 4,0 1)", "(0,1),(3,4)");
92 test_expand
<segment_type
>(b
, "SEGMENT(5 6,7 8)", "(0,1),(7,8)");
95 template <typename Point
>
96 void test_spherical_degree()
98 bg::model::box
<Point
> b
= bg::make_inverse
<bg::model::box
<Point
> >();
100 test_expand
<Point
>(b
, "POINT(179.73 71.56)",
101 "(179.73,71.56),(179.73,71.56)");
102 test_expand
<Point
>(b
, "POINT(177.47 71.23)",
103 "(177.47,71.23),(179.73,71.56)");
105 // It detects that this point is lying RIGHT of the others,
106 // and then it "expands" it.
107 // It might be argued that "181.22" is displayed instead. However, they are
109 test_expand
<Point
>(b
, "POINT(-178.78 70.78)",
110 "(177.47,70.78),(-178.78,71.56)");
114 template <typename Point
>
115 void test_spherical_radian()
117 bg::model::box
<Point
> b
= bg::make_inverse
<bg::model::box
<Point
> >();
119 test_expand
<Point
>(b
, "POINT(3.128 1.249)",
120 "(3.128,1.249),(3.128,1.249)");
121 test_expand
<Point
>(b
, "POINT(3.097 1.243)",
122 "(3.097,1.243),(3.128,1.249)");
124 // It detects that this point is lying RIGHT of the others,
125 // and then it "expands" it.
126 // It might be argued that "181.22" is displayed instead. However, they are
128 test_expand
<Point
>(b
, "POINT(-3.121 1.235)",
129 "(3.097,1.235),(-3.121,1.249)");
132 int test_main(int, char* [])
134 test_2d
<bg::model::point
<int, 2, bg::cs::cartesian
> >();
137 test_3d
<test::test_point
>();
138 test_3d
<bg::model::point
<int, 3, bg::cs::cartesian
> >();
139 test_3d
<bg::model::point
<float, 3, bg::cs::cartesian
> >();
140 test_3d
<bg::model::point
<double, 3, bg::cs::cartesian
> >();
142 test_spherical_degree
<bg::model::point
<double, 2, bg::cs::spherical
<bg::degree
> > >();
143 test_spherical_radian
<bg::model::point
<double, 2, bg::cs::spherical
<bg::radian
> > >();
146 #if defined(HAVE_TTMATH)
147 test_3d
<bg::model::point
<ttmath_big
, 3, bg::cs::cartesian
> >();
148 test_spherical_degree
<bg::model::point
<ttmath_big
, 2, bg::cs::spherical
<bg::degree
> > >();
149 test_spherical_radian
<bg::model::point
<ttmath_big
, 2, bg::cs::spherical
<bg::radian
> > >();