]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/algorithms/intersects/intersects_box_geometry.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / intersects / intersects_box_geometry.cpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2
3 // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
4 // Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
5
6 // This file was modified by Oracle on 2013, 2015, 2016.
7 // Modifications copyright (c) 2013-2016, Oracle and/or its affiliates.
8
9 // Use, modification and distribution is subject to the Boost Software License,
10 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
11 // http://www.boost.org/LICENSE_1_0.txt)
12
13 #include "test_intersects.hpp"
14
15
16 #include <boost/geometry/geometries/geometries.hpp>
17 #include <boost/geometry/geometries/point_xy.hpp>
18
19 #include <boost/geometry/util/rational.hpp>
20
21
22 template <typename P1, typename P2>
23 void test_all()
24 {
25 typedef bg::model::polygon<P1> polygon;
26 typedef bg::model::ring<P1> ring;
27
28 // intersect <=> ! disjoint (in most cases)
29 // so most tests are done in disjoint test.
30 // We only test compilation of a few cases.
31 test_geometry<P1, bg::model::box<P2> >("POINT(1 1)", "BOX(0 0,2 2)", true);
32
33 test_geometry<polygon, bg::model::box<P2> >(
34 "POLYGON((1992 3240,1992 1440,3792 1800,3792 3240,1992 3240))",
35 "BOX(1941 2066, 2055 2166)", true);
36
37 test_geometry<ring, bg::model::box<P2> >(
38 "POLYGON((1992 3240,1992 1440,3792 1800,3792 3240,1992 3240))",
39 "BOX(1941 2066, 2055 2166)", true);
40
41 test_geometry<polygon, bg::model::box<P2> >(
42 "POLYGON((1941 2066,2055 2066,2055 2166,1941 2166))",
43 "BOX(1941 2066, 2055 2166)", true);
44
45 test_geometry<P1, bg::model::box<P2> >(
46 "POINT(0 0)",
47 "BOX(0 0,4 4)",
48 true);
49 }
50
51 template <typename P>
52 void test_all()
53 {
54 test_all<P, P>();
55 }
56
57 // Those tests won't pass for rational<> because numeric_limits<> isn't specialized for this type
58 template <typename P>
59 void test_additional()
60 {
61 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
62 "SEGMENT(0 0,3 3)",
63 "BOX(1 2,3 5)",
64 true);
65 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
66 "SEGMENT(1 1,2 3)",
67 "BOX(0 0,4 4)",
68 true);
69 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
70 "SEGMENT(1 1,1 1)",
71 "BOX(1 0,3 5)",
72 true);
73 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
74 "SEGMENT(0 1,0 1)",
75 "BOX(1 0,3 5)",
76 false);
77 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
78 "SEGMENT(2 1,2 1)",
79 "BOX(1 0,3 5)",
80 true);
81 test_geometry<bg::model::linestring<P>, bg::model::box<P> >(
82 "LINESTRING(0 0,1 0,10 10)",
83 "BOX(1 2,3 5)",
84 true);
85 test_geometry<bg::model::linestring<P>, bg::model::box<P> >(
86 "LINESTRING(1 2)",
87 "BOX(0 0,3 5)",
88 true);
89
90 // http://stackoverflow.com/questions/32457920/boost-rtree-of-box-gives-wrong-intersection-with-segment
91 // http://lists.boost.org/geometry/2015/09/3476.php
92 typedef bg::model::point<typename bg::coordinate_type<P>::type, 3, bg::cs::cartesian> point3d_t;
93 test_geometry<bg::model::segment<point3d_t>, bg::model::box<point3d_t> >(
94 "SEGMENT(2 1 0,2 1 10)",
95 "BOX(0 0 0,10 0 10)",
96 false);
97 test_geometry<bg::model::segment<point3d_t>, bg::model::box<point3d_t> >(
98 "SEGMENT(2 1 0,2 1 10)",
99 "BOX(0 -5 0,10 0 10)",
100 false);
101 // and derived from the cases above
102 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
103 "SEGMENT(12 0,20 10)",
104 "BOX(0 0,10 10)",
105 false);
106 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
107 "SEGMENT(2 0,8 6)",
108 "BOX(0 0,10 10)",
109 true);
110 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
111 "SEGMENT(2 0,18 8)",
112 "BOX(0 0,10 10)",
113 true);
114 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
115 "SEGMENT(1 0,1 10)",
116 "BOX(0 0,0 10)",
117 false);
118 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
119 "SEGMENT(-1 0,-1 10)",
120 "BOX(0 0,0 10)",
121 false);
122 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
123 "SEGMENT(2 1,2 1)",
124 "BOX(0 0,10 0)",
125 false);
126 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
127 "SEGMENT(2 3,2 3)",
128 "BOX(0 0,10 0)",
129 false);
130 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
131 "SEGMENT(0 0,10 0)",
132 "BOX(0 0,10 0)",
133 true);
134 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
135 "SEGMENT(10 0,10 0)",
136 "BOX(0 0,10 0)",
137 true);
138 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
139 "SEGMENT(1 0,1 0)",
140 "BOX(0 0,10 0)",
141 true);
142 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
143 "SEGMENT(0 0,0 10)",
144 "BOX(0 0,0 10)",
145 true);
146 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
147 "SEGMENT(0 10,0 10)",
148 "BOX(0 0,0 10)",
149 true);
150 test_geometry<bg::model::segment<P>, bg::model::box<P> >(
151 "SEGMENT(0 1,0 1)",
152 "BOX(0 0,0 10)",
153 true);
154 }
155
156
157 int test_main( int , char* [] )
158 {
159 test_all<bg::model::d2::point_xy<float>, bg::model::point<double, 2, bg::cs::cartesian> >();
160 test_all<bg::model::d2::point_xy<double> >();
161 test_additional<bg::model::d2::point_xy<double> >();
162
163 #if ! defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST)
164 test_all<bg::model::d2::point_xy<boost::rational<int> > >();
165 #endif
166
167 return 0;
168 }