]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | #if defined(HAVE_TTMATH) | |
168 | test_all<bg::model::d2::point_xy<ttmath_big> >(); | |
169 | #endif | |
170 | ||
171 | return 0; | |
172 | } |