]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/numeric/interval/test/cmp_exn.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / numeric / interval / test / cmp_exn.cpp
CommitLineData
7c673cae
FG
1/* Boost test/cmp_exn.cpp
2 * test policies with respect to exception throwing
3 *
4 * Copyright 2004 Guillaume Melquiond
5 *
6 * Distributed under the Boost Software License, Version 1.0.
7 * (See accompanying file LICENSE_1_0.txt or
8 * copy at http://www.boost.org/LICENSE_1_0.txt)
9 */
10
11#include <boost/numeric/interval/interval.hpp>
12#include <boost/numeric/interval/checking.hpp>
13#include <boost/numeric/interval/compare.hpp>
14#include <boost/numeric/interval/policies.hpp>
15#include <boost/numeric/interval/compare/tribool.hpp>
1e59de90 16#include <boost/core/lightweight_test.hpp>
7c673cae
FG
17
18struct my_checking
19{
20 static int nan() { return -1; }
21 static bool is_nan(int x) { return x < 0; }
22 static int empty_lower() { return -1; }
23 static int empty_upper() { return -1; }
24 static bool is_empty(int l, int u) { return l == -1 && u == -1; }
25};
26
27struct empty_class {};
28
29typedef boost::numeric::interval_lib::policies< empty_class, my_checking >
30 my_policies;
31
32typedef boost::numeric::interval<int, my_policies> I;
33
34#define BOOST_C_EXN(e) \
1e59de90 35 BOOST_TEST_THROWS(e, boost::numeric::interval_lib::comparison_error)
7c673cae
FG
36
37static void test_cer()
38{
39 I const a(I::empty()), b(1,2);
40 int const c = 0, d = my_checking::nan();
41 using namespace boost::numeric::interval_lib::compare::certain;
42
43 BOOST_C_EXN(a < b);
44 BOOST_C_EXN(a <= b);
45 BOOST_C_EXN(a > b);
46 BOOST_C_EXN(a >= b);
47 BOOST_C_EXN(a == b);
48 BOOST_C_EXN(a != b);
49 BOOST_C_EXN(b < a);
50 BOOST_C_EXN(b <= a);
51 BOOST_C_EXN(b > a);
52 BOOST_C_EXN(b >= a);
53 BOOST_C_EXN(b == a);
54 BOOST_C_EXN(b != a);
55
56 BOOST_C_EXN(a < c);
57 BOOST_C_EXN(a <= c);
58 BOOST_C_EXN(a > c);
59 BOOST_C_EXN(a >= c);
60 BOOST_C_EXN(a == c);
61 BOOST_C_EXN(a != c);
62 BOOST_C_EXN(b < d);
63 BOOST_C_EXN(b <= d);
64 BOOST_C_EXN(b > d);
65 BOOST_C_EXN(b >= d);
66 BOOST_C_EXN(b == d);
67 BOOST_C_EXN(b != d);
68}
69
70static void test_def()
71{
72 I const a(I::empty()), b(1,2);
73 int const c = 0, d = my_checking::nan();
74
75 BOOST_C_EXN(a < b);
76 BOOST_C_EXN(a <= b);
77 BOOST_C_EXN(a > b);
78 BOOST_C_EXN(a >= b);
79 BOOST_C_EXN(a == b);
80 BOOST_C_EXN(a != b);
81 BOOST_C_EXN(b < a);
82 BOOST_C_EXN(b <= a);
83 BOOST_C_EXN(b > a);
84 BOOST_C_EXN(b >= a);
85 BOOST_C_EXN(b == a);
86 BOOST_C_EXN(b != a);
87
88 BOOST_C_EXN(a < c);
89 BOOST_C_EXN(a <= c);
90 BOOST_C_EXN(a > c);
91 BOOST_C_EXN(a >= c);
92 BOOST_C_EXN(a == c);
93 BOOST_C_EXN(a != c);
94 BOOST_C_EXN(b < d);
95 BOOST_C_EXN(b <= d);
96 BOOST_C_EXN(b > d);
97 BOOST_C_EXN(b >= d);
98 BOOST_C_EXN(b == d);
99 BOOST_C_EXN(b != d);
100}
101
102static void test_lex()
103{
104 I const a(I::empty()), b(1,2);
105 int const c = 0, d = my_checking::nan();
106 using namespace boost::numeric::interval_lib::compare::lexicographic;
107
108 BOOST_C_EXN(a < b);
109 BOOST_C_EXN(a <= b);
110 BOOST_C_EXN(a > b);
111 BOOST_C_EXN(a >= b);
112 BOOST_C_EXN(a == b);
113 BOOST_C_EXN(a != b);
114 BOOST_C_EXN(b < a);
115 BOOST_C_EXN(b <= a);
116 BOOST_C_EXN(b > a);
117 BOOST_C_EXN(b >= a);
118 BOOST_C_EXN(b == a);
119 BOOST_C_EXN(b != a);
120
121 BOOST_C_EXN(a < c);
122 BOOST_C_EXN(a <= c);
123 BOOST_C_EXN(a > c);
124 BOOST_C_EXN(a >= c);
125 BOOST_C_EXN(a == c);
126 BOOST_C_EXN(a != c);
127 BOOST_C_EXN(b < d);
128 BOOST_C_EXN(b <= d);
129 BOOST_C_EXN(b > d);
130 BOOST_C_EXN(b >= d);
131 BOOST_C_EXN(b == d);
132 BOOST_C_EXN(b != d);
133}
134
135static void test_pos()
136{
137 I const a(I::empty()), b(1,2);
138 int const c = 0, d = my_checking::nan();
139 using namespace boost::numeric::interval_lib::compare::possible;
140
141 BOOST_C_EXN(a < b);
142 BOOST_C_EXN(a <= b);
143 BOOST_C_EXN(a > b);
144 BOOST_C_EXN(a >= b);
145 BOOST_C_EXN(a == b);
146 BOOST_C_EXN(a != b);
147 BOOST_C_EXN(b < a);
148 BOOST_C_EXN(b <= a);
149 BOOST_C_EXN(b > a);
150 BOOST_C_EXN(b >= a);
151 BOOST_C_EXN(b == a);
152 BOOST_C_EXN(b != a);
153
154 BOOST_C_EXN(a < c);
155 BOOST_C_EXN(a <= c);
156 BOOST_C_EXN(a > c);
157 BOOST_C_EXN(a >= c);
158 BOOST_C_EXN(a == c);
159 BOOST_C_EXN(a != c);
160 BOOST_C_EXN(b < d);
161 BOOST_C_EXN(b <= d);
162 BOOST_C_EXN(b > d);
163 BOOST_C_EXN(b >= d);
164 BOOST_C_EXN(b == d);
165 BOOST_C_EXN(b != d);
166}
167
168static void test_set()
169{
170 I const a(I::empty()), b(1,2);
171 int const c = 0;
172 using namespace boost::numeric::interval_lib::compare::set;
173
174 BOOST_C_EXN(a < c);
175 BOOST_C_EXN(a <= c);
176 BOOST_C_EXN(a > c);
177 BOOST_C_EXN(a >= c);
178 BOOST_C_EXN(a == c);
179 BOOST_C_EXN(a != c);
180 BOOST_C_EXN(b < c);
181 BOOST_C_EXN(b <= c);
182 BOOST_C_EXN(b > c);
183 BOOST_C_EXN(b >= c);
184 BOOST_C_EXN(b == c);
185 BOOST_C_EXN(b != c);
186}
187
188static void test_tri()
189{
190 I const a(I::empty()), b(1,2);
191 int const c = 0, d = my_checking::nan();
192 using namespace boost::numeric::interval_lib::compare::tribool;
193
194 BOOST_C_EXN(a < b);
195 BOOST_C_EXN(a <= b);
196 BOOST_C_EXN(a > b);
197 BOOST_C_EXN(a >= b);
198 BOOST_C_EXN(a == b);
199 BOOST_C_EXN(a != b);
200 BOOST_C_EXN(b < a);
201 BOOST_C_EXN(b <= a);
202 BOOST_C_EXN(b > a);
203 BOOST_C_EXN(b >= a);
204 BOOST_C_EXN(b == a);
205 BOOST_C_EXN(b != a);
206
207 BOOST_C_EXN(a < c);
208 BOOST_C_EXN(a <= c);
209 BOOST_C_EXN(a > c);
210 BOOST_C_EXN(a >= c);
211 BOOST_C_EXN(a == c);
212 BOOST_C_EXN(a != c);
213 BOOST_C_EXN(b < d);
214 BOOST_C_EXN(b <= d);
215 BOOST_C_EXN(b > d);
216 BOOST_C_EXN(b >= d);
217 BOOST_C_EXN(b == d);
218 BOOST_C_EXN(b != d);
219}
220
1e59de90 221int main() {
7c673cae
FG
222 test_cer();
223 test_def();
224 test_lex();
225 test_pos();
226 test_set();
227 test_tri();
228
1e59de90 229 return boost::report_errors();
7c673cae 230}