]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/test/algorithms/relational_operations/intersects/intersects_box_geometry.cpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / relational_operations / intersects / intersects_box_geometry.cpp
CommitLineData
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
22template <typename P1, typename P2>
23void 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
51template <typename P>
52void 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
58template <typename P>
59void 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
157int 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}