]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/test/algorithms/overlay/select_rings.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / overlay / select_rings.cpp
CommitLineData
7c673cae
FG
1// Boost.Geometry (aka GGL, Generic Geometry Library)
2//
3// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
b32b8144
FG
4//
5// This file was modified by Oracle on 2017.
6// Modifications copyright (c) 2017 Oracle and/or its affiliates.
7// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
8//
7c673cae
FG
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 <geometry_test_common.hpp>
14
b32b8144 15#include <boost/foreach.hpp>
7c673cae 16#include <boost/range/algorithm/copy.hpp>
b32b8144
FG
17#include <boost/tuple/tuple.hpp>
18#include <boost/typeof/typeof.hpp>
19
20#include <algorithms/test_overlay.hpp>
7c673cae
FG
21
22#include <boost/geometry/geometry.hpp>
23#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
24#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
25
26#include <boost/geometry/geometries/point_xy.hpp>
27#include <boost/geometry/geometries/polygon.hpp>
28
29#include <boost/geometry/io/wkt/read.hpp>
30
31#include <boost/assign/list_of.hpp>
7c673cae
FG
32
33
34template
35<
36 typename Geometry1,
37 typename Geometry2,
38 bg::overlay_type OverlayType,
39 typename RingIdVector
40>
41void test_geometry(std::string const& wkt1, std::string const& wkt2,
42 RingIdVector const& expected_ids)
43{
b32b8144
FG
44 typedef bg::detail::overlay::ring_properties
45 <
46 typename bg::point_type<Geometry1>::type,
47 double
48 > properties;
7c673cae
FG
49
50 Geometry1 geometry1;
51 Geometry2 geometry2;
52
53 bg::read_wkt(wkt1, geometry1);
54 bg::read_wkt(wkt2, geometry2);
55
56 typedef std::map<bg::ring_identifier, properties> map_type;
57 map_type selected;
58 std::map<bg::ring_identifier, bg::detail::overlay::ring_turn_info> empty;
59
b32b8144
FG
60 typedef typename bg::strategy::intersection::services::default_strategy
61 <
62 typename bg::cs_tag<Geometry1>::type
63 >::type strategy_type;
64
65 bg::detail::overlay::select_rings<OverlayType>(geometry1, geometry2, empty, selected, strategy_type());
7c673cae
FG
66
67 BOOST_CHECK_EQUAL(selected.size(), expected_ids.size());
68
69 if (selected.size() <= expected_ids.size())
70 {
71 BOOST_AUTO(eit, expected_ids.begin());
72 for(typename map_type::const_iterator it = selected.begin(); it != selected.end(); ++it, ++eit)
73 {
74 bg::ring_identifier const ring_id = it->first;
75 BOOST_CHECK_EQUAL(ring_id.source_index, eit->source_index);
76 BOOST_CHECK_EQUAL(ring_id.multi_index, eit->multi_index);
77 BOOST_CHECK_EQUAL(ring_id.ring_index, eit->ring_index);
78 }
79 }
80}
81
82
83
84
85template <typename P>
86void test_all()
87{
88 // Point in correct clockwise ring -> should return true
89 typedef bg::ring_identifier rid;
90
91 test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_union>(
92 winded[0], winded[1],
93 boost::assign::list_of
94 (rid(0,-1,-1))
95 (rid(0,-1, 0))
96 (rid(0,-1, 1))
97 (rid(0,-1, 3))
98 (rid(1,-1, 1))
99 (rid(1,-1, 2)));
100
101 test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_intersection>(
102 winded[0], winded[1],
103 boost::assign::list_of
104 (rid(0,-1, 2))
105 (rid(1,-1,-1))
106 (rid(1,-1, 0))
107 (rid(1,-1, 3)));
108}
109
110
111
112
113int test_main( int , char* [] )
114{
115 test_all<bg::model::d2::point_xy<double> >();
116
117 return 0;
118}