]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/test/algorithms/relate/nan_cases.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / relate / nan_cases.hpp
CommitLineData
7c673cae
FG
1// Boost.Geometry
2
1e59de90 3// Copyright (c) 2015-2021 Oracle and/or its affiliates.
7c673cae
FG
4// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
5
6// Use, modification and distribution is subject to the Boost Software License,
7// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9
10#include <geometry_test_common.hpp>
11
12#include <boost/geometry/geometries/geometries.hpp>
13#include <boost/geometry/geometries/point_xy.hpp>
14
15#include <boost/range/value_type.hpp>
7c673cae
FG
16
17template <typename Container>
18struct pusher
19 : public Container
20{
21 typedef typename Container::value_type value_type;
22 pusher(value_type const& val)
23 {
24 this->push_back(val);
25 }
26
27 pusher & operator()(value_type const& val)
28 {
29 this->push_back(val);
30 return *this;
31 }
32};
33
34template <typename Geometry,
35 typename Tag = typename bg::tag<Geometry>::type,
36 typename Coord = typename bg::coordinate_type<Geometry>::type>
37struct nan_case_generator
38{
39 static void apply(Geometry & , std::string & )
40 {}
41};
42
43template <typename Geometry>
44struct nan_case_generator<Geometry, bg::multi_linestring_tag, double>
45{
46 static void apply(Geometry & geometry, std::string & wkt)
47 {
48 typedef typename boost::range_value<Geometry>::type ls;
49 typedef typename bg::point_type<Geometry>::type P;
50 typedef typename bg::coordinate_type<Geometry>::type coord_t;
51 coord_t nan = std::numeric_limits<coord_t>::quiet_NaN();
52
53 wkt = "MULTILINESTRING((3.1e+307 1,-nan -nan),(3.1e+307 1,-nan -nan),(3.1e+307 1,5.1e+307 6e+307,nan nan),(-nan -nan,nan nan),(-nan -nan,-1 -3.97843,-1 3.28571,-1 47.6364),(3 78.5455,3 2),(nan nan,3 12.9689),(3 -2,-nan -nan),(3 2,3 12.9689,3 78.5455),(-1 4.29497e+09,-1 7,-nan -nan),(9 5,-nan -nan),(-nan -nan,9 60.8755,9 124.909),(nan nan,1 6.87195e+10,-nan -nan),(nan nan,4 86.2727,4 20.9533),(4 -5,-nan -nan),(4 -5,-nan -nan),(4 -5,-nan -nan),(4 -5,1.1e+308 2.1e+307,nan nan),(-nan -nan,-1 -8),(-nan -nan,-9 -4))";
54
55 typedef pusher<Geometry> ml;
56 typedef pusher<ls> l;
57 geometry = ml(l(P(3.1e+307, 1))(P(-nan, -nan)))
58 (l(P(3.1e+307, 1))(P(-nan, -nan)))
59 (l(P(3.1e+307, 1))(P(5.1e+307, 6e+307))(P(nan, nan)))
60 (l(P(-nan, -nan))(P(nan, nan)))
61 (l(P(-nan, -nan))(P(-1, -3.97843))(P(-1, 3.28571))(P(-1, 47.6364)))
62 (l(P(3, 78.5455))(P(3, 2)))
63 (l(P(nan, nan))(P(3, 12.9689)))
64 (l(P(3, -2))(P(-nan, -nan)))
65 (l(P(3, 2))(P(3, 12.9689))(P(3, 78.5455)))
66 (l(P(-1, 4.29497e+09))(P(-1, 7))(P(-nan, -nan)))
67 (l(P(9, 5))(P(-nan, -nan)))
68 (l(P(-nan, -nan))(P(9, 60.8755))(P(9, 124.909)))
69 (l(P(nan, nan))(P(1, 6.87195e+10))(P(-nan, -nan)))
70 (l(P(nan, nan))(P(4, 86.2727))(P(4, 20.9533)))
71 (l(P(4, -5))(P(-nan, -nan)))
72 (l(P(4, -5))(P(-nan, -nan)))
73 (l(P(4, -5))(P(-nan, -nan)))
74 (l(P(4, -5))(P(1.1e+308, 2.1e+307))(P(nan, nan)))
75 (l(P(-nan, -nan))(P(-1, -8)))
76 (l(P(-nan, -nan))(P(-9, -4)));
77 }
78};
79
80template <typename Geometry>
81struct nan_case_generator<Geometry, bg::multi_point_tag, double>
82{
83 static void apply(Geometry & geometry, std::string & wkt)
84 {
85 typedef typename bg::point_type<Geometry>::type P;
86 typedef typename bg::coordinate_type<Geometry>::type coord_t;
87 coord_t nan = std::numeric_limits<coord_t>::quiet_NaN();
88
89 wkt = "MULTIPOINT((3.1e+307 1),(-nan -nan),(3.1e+307 1),(-nan -nan),(3.1e+307 1),(5.1e+307 6e+307),(nan nan),(-nan -nan),(nan nan),(-nan -nan),(-1 -3.97843),(-1 3.28571),(-1 47.6364),(3 78.5455),(3 2),(nan nan),(3 12.9689),(3 -2),(-nan -nan),(3 2),(3 12.9689),(3 78.5455),(-1 4.29497e+09),(-1 7),(-nan -nan),(9 5),(-nan -nan),(-nan -nan),(9 60.8755),(9 124.909),(nan nan),(1 6.87195e+10),(-nan -nan),(nan nan),(4 86.2727),(4 20.9533),(4 -5),(-nan -nan),(4 -5),(-nan -nan),(4 -5),(-nan -nan),(4 -5),(1.1e+308 2.1e+307),(nan nan),(-nan -nan),(-1 -8),(-nan -nan),(-9 -4))";
90
91 typedef pusher<Geometry> mp;
92 geometry = mp(P(3.1e+307, 1))(P(-nan, -nan))
93 (P(3.1e+307, 1))(P(-nan, -nan))
94 (P(3.1e+307, 1))(P(5.1e+307, 6e+307))(P(nan, nan))
95 (P(-nan, -nan))(P(nan, nan))
96 (P(-nan, -nan))(P(-1, -3.97843))(P(-1, 3.28571))(P(-1, 47.6364))
97 (P(3, 78.5455))(P(3, 2))
98 (P(nan, nan))(P(3, 12.9689))
99 (P(3, -2))(P(-nan, -nan))
100 (P(3, 2))(P(3, 12.9689))(P(3, 78.5455))
101 (P(-1, 4.29497e+09))(P(-1, 7))(P(-nan, -nan))
102 (P(9, 5))(P(-nan, -nan))
103 (P(-nan, -nan))(P(9, 60.8755))(P(9, 124.909))
104 (P(nan, nan))(P(1, 6.87195e+10))(P(-nan, -nan))
105 (P(nan, nan))(P(4, 86.2727))(P(4, 20.9533))
106 (P(4, -5))(P(-nan, -nan))
107 (P(4, -5))(P(-nan, -nan))
108 (P(4, -5))(P(-nan, -nan))
109 (P(4, -5))(P(1.1e+308, 2.1e+307))(P(nan, nan))
110 (P(-nan, -nan))(P(-1, -8))
111 (P(-nan, -nan))(P(-9, -4));
112 }
113};
114
115template <typename Geometry>
116void nan_case(Geometry & geometry, std::string & wkt)
117{
118 nan_case_generator<Geometry>::apply(geometry, wkt);
119}
120
121template <typename Geometry>
122struct is_nan_case_supported
123{
124 typedef typename bg::coordinate_type<Geometry>::type coord_t;
125
1e59de90 126 static const bool value = std::is_same<coord_t, double>::value
7c673cae 127 && std::numeric_limits<coord_t>::has_quiet_NaN;
b32b8144 128};