Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/numeric/interval/test/cmp_exn.cpp @ 30

Last change on this file since 30 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 5.0 KB
Line 
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>
16#include <boost/test/test_tools.hpp>
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) \
35  BOOST_CHECK_THROW(e, boost::numeric::interval_lib::comparison_error)
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
221int test_main(int, char *[]) {
222  test_cer();
223  test_def();
224  test_lex();
225  test_pos();
226  test_set();
227  test_tri();
228
229  return 0;
230}
Note: See TracBrowser for help on using the repository browser.