• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>
test_all()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>
test_all()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>
test_additional()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 
test_main(int,char * [])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 }
173