1 /*++
2 Copyright (c) 2012 Microsoft Corporation
3
4 Module Name:
5
6 ext_numeral.cpp
7
8 Abstract:
9
10 Unit tests for ext_numeral template.
11
12 Author:
13
14 Leonardo (leonardo) 2012-07-18
15
16 Notes:
17
18 --*/
19 #include<sstream>
20 #include "util/mpq.h"
21 #include "util/ext_numeral.h"
22
23 #define MK_TST_UNARY(NAME) \
24 static void tst_ ## NAME(int a, ext_numeral_kind ak, int expected_c, ext_numeral_kind expected_ck) { \
25 unsynch_mpq_manager m; \
26 scoped_mpq _a(m); \
27 m.set(_a, a); \
28 NAME(m, _a, ak); \
29 ENSURE(ak == expected_ck); \
30 if (expected_ck == EN_NUMERAL) { \
31 scoped_mpq _expected_c(m); \
32 m.set(_expected_c, expected_c); \
33 ENSURE(m.eq(_a, _expected_c)); \
34 } \
35 }
36
37 MK_TST_UNARY(neg);
38 MK_TST_UNARY(inv);
39
40 #define MK_TST_BIN_CORE(FUN_NAME, OP_NAME) \
41 static void FUN_NAME(int a, ext_numeral_kind ak, int b, ext_numeral_kind bk, int expected_c, ext_numeral_kind expected_ck) { \
42 unsynch_mpq_manager m; \
43 scoped_mpq _a(m), _b(m), _c(m); \
44 m.set(_a, a); \
45 m.set(_b, b); \
46 ext_numeral_kind ck(EN_NUMERAL); \
47 OP_NAME(m, _a, ak, _b, bk, _c, ck); \
48 ENSURE(ck == expected_ck); \
49 if (expected_ck == EN_NUMERAL) { \
50 scoped_mpq _expected_c(m); \
51 m.set(_expected_c, expected_c); \
52 ENSURE(m.eq(_c, _expected_c)); \
53 } \
54 }
55
56 #define MK_TST_BIN(NAME) MK_TST_BIN_CORE(tst_ ## NAME, NAME)
57
58 #define MK_TST_COMM_BIN(NAME) \
59 MK_TST_BIN_CORE(tst_ ## NAME ## _core, NAME) \
60 static void tst_ ## NAME(int a, ext_numeral_kind ak, int b, ext_numeral_kind bk, int expected_c, ext_numeral_kind expected_ck) { \
61 tst_ ## NAME ## _core(a, ak, b, bk, expected_c, expected_ck); \
62 tst_ ## NAME ## _core(b, bk, a, ak, expected_c, expected_ck); \
63 }
64
65 MK_TST_COMM_BIN(add);
66 MK_TST_BIN(sub);
67 MK_TST_COMM_BIN(mul);
68
tst1()69 static void tst1() {
70 tst_neg(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY);
71 tst_neg(30, EN_MINUS_INFINITY, 10, EN_PLUS_INFINITY);
72 tst_neg(0, EN_NUMERAL, 0, EN_NUMERAL);
73 tst_neg(10, EN_NUMERAL, -10, EN_NUMERAL);
74 tst_neg(-7, EN_NUMERAL, 7, EN_NUMERAL);
75 tst_neg(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
76 tst_neg(30, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
77 tst_neg(-7, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
78
79 tst_inv(0, EN_MINUS_INFINITY, 0, EN_NUMERAL);
80 tst_inv(0, EN_PLUS_INFINITY, 0, EN_NUMERAL);
81 tst_inv(1, EN_NUMERAL, 1, EN_NUMERAL);
82 tst_inv(-1, EN_NUMERAL, -1, EN_NUMERAL);
83
84 tst_add(0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY);
85 tst_add(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, 0, EN_MINUS_INFINITY);
86 tst_add(0, EN_MINUS_INFINITY, -1, EN_NUMERAL, 0, EN_MINUS_INFINITY);
87 tst_add(0, EN_MINUS_INFINITY, 1, EN_NUMERAL, 0, EN_MINUS_INFINITY);
88 tst_add(1, EN_MINUS_INFINITY, -1, EN_NUMERAL, 0, EN_MINUS_INFINITY);
89 tst_add(1, EN_NUMERAL, 0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY);
90 tst_add(-1, EN_NUMERAL, 0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY);
91 tst_add(0, EN_NUMERAL, 0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY);
92
93 tst_add(0, EN_NUMERAL, 2, EN_NUMERAL, 2, EN_NUMERAL);
94 tst_add(-3, EN_NUMERAL, 4, EN_NUMERAL, 1, EN_NUMERAL);
95 tst_add(-2, EN_NUMERAL, 0, EN_NUMERAL, -2, EN_NUMERAL);
96 tst_add(3, EN_NUMERAL, 4, EN_NUMERAL, 7, EN_NUMERAL);
97
98 tst_add(0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY);
99 tst_add(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, 0, EN_PLUS_INFINITY);
100 tst_add(0, EN_PLUS_INFINITY, 1, EN_NUMERAL, 0, EN_PLUS_INFINITY);
101 tst_add(0, EN_PLUS_INFINITY, -1, EN_NUMERAL, 0, EN_PLUS_INFINITY);
102 tst_add(0, EN_NUMERAL, 0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY);
103 tst_add(-1, EN_NUMERAL, 0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY);
104 tst_add(1, EN_NUMERAL, 0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY);
105
106 tst_mul(0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY);
107 tst_mul(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
108 tst_mul(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, 0, EN_MINUS_INFINITY);
109 tst_mul(0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY, 0, EN_PLUS_INFINITY);
110
111 tst_mul(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, 0, EN_NUMERAL);
112 tst_mul(0, EN_MINUS_INFINITY, 1, EN_NUMERAL, 0, EN_MINUS_INFINITY);
113 tst_mul(0, EN_MINUS_INFINITY, 5, EN_NUMERAL, 0, EN_MINUS_INFINITY);
114 tst_mul(0, EN_MINUS_INFINITY, -1, EN_NUMERAL, 0, EN_PLUS_INFINITY);
115 tst_mul(0, EN_MINUS_INFINITY, -5, EN_NUMERAL, 0, EN_PLUS_INFINITY);
116
117 tst_mul(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, 0, EN_NUMERAL);
118 tst_mul(0, EN_PLUS_INFINITY, 1, EN_NUMERAL, 0, EN_PLUS_INFINITY);
119 tst_mul(0, EN_PLUS_INFINITY, 5, EN_NUMERAL, 0, EN_PLUS_INFINITY);
120 tst_mul(0, EN_PLUS_INFINITY, -1, EN_NUMERAL, 0, EN_MINUS_INFINITY);
121 tst_mul(0, EN_PLUS_INFINITY, -5, EN_NUMERAL, 0, EN_MINUS_INFINITY);
122
123 tst_mul(0, EN_NUMERAL, 3, EN_NUMERAL, 0, EN_NUMERAL);
124 tst_mul(2, EN_NUMERAL, 3, EN_NUMERAL, 6, EN_NUMERAL);
125 tst_mul(-2, EN_NUMERAL, 3, EN_NUMERAL, -6, EN_NUMERAL);
126
127 tst_sub(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY);
128 tst_sub(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, 0, EN_PLUS_INFINITY);
129 tst_sub(0, EN_PLUS_INFINITY, -10, EN_NUMERAL, 0, EN_PLUS_INFINITY);
130 tst_sub(0, EN_PLUS_INFINITY, 10, EN_NUMERAL, 0, EN_PLUS_INFINITY);
131
132 tst_sub(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
133 tst_sub(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, 0, EN_MINUS_INFINITY);
134 tst_sub(0, EN_MINUS_INFINITY, -10, EN_NUMERAL, 0, EN_MINUS_INFINITY);
135 tst_sub(0, EN_MINUS_INFINITY, 10, EN_NUMERAL, 0, EN_MINUS_INFINITY);
136
137 tst_sub(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY);
138 tst_sub(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, 0, EN_MINUS_INFINITY);
139 tst_sub(0, EN_MINUS_INFINITY, 3, EN_NUMERAL, 0, EN_MINUS_INFINITY);
140 tst_sub(0, EN_MINUS_INFINITY, -3, EN_NUMERAL, 0, EN_MINUS_INFINITY);
141
142 tst_sub(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY);
143 tst_sub(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, 0, EN_PLUS_INFINITY);
144 tst_sub(0, EN_PLUS_INFINITY, 3, EN_NUMERAL, 0, EN_PLUS_INFINITY);
145 tst_sub(0, EN_PLUS_INFINITY, -3, EN_NUMERAL, 0, EN_PLUS_INFINITY);
146
147 tst_sub(0, EN_NUMERAL, 2, EN_NUMERAL, -2, EN_NUMERAL);
148 tst_sub(3, EN_NUMERAL, 2, EN_NUMERAL, 1, EN_NUMERAL);
149 tst_sub(3, EN_NUMERAL, -3, EN_NUMERAL, 6, EN_NUMERAL);
150 tst_sub(3, EN_NUMERAL, 3, EN_NUMERAL, 0, EN_NUMERAL);
151 tst_sub(3, EN_NUMERAL, 0, EN_NUMERAL, 3, EN_NUMERAL);
152 tst_sub(-3, EN_NUMERAL, -5, EN_NUMERAL, 2, EN_NUMERAL);
153 }
154
155 #define MK_TST_REL_CORE(FUN_NAME, OP_NAME) \
156 static void FUN_NAME(int a, ext_numeral_kind ak, int b, ext_numeral_kind bk, bool expected) { \
157 unsynch_mpq_manager m; \
158 scoped_mpq _a(m), _b(m); \
159 m.set(_a, a); \
160 m.set(_b, b); \
161 VERIFY(expected == OP_NAME(m, _a, ak, _b, bk)); \
162 }
163
164 #define MK_TST_REL(NAME) MK_TST_REL_CORE(tst_ ## NAME, NAME)
165
166 #define MK_TST_SYMM_REL(NAME) \
167 MK_TST_REL_CORE(tst_ ## NAME ## _core, NAME) \
168 static void tst_ ## NAME(int a, ext_numeral_kind ak, int b, ext_numeral_kind bk, bool expected) { \
169 tst_ ## NAME ## _core(a, ak, b, bk, expected); \
170 tst_ ## NAME ## _core(b, bk, a, ak, expected); \
171 }
172
173 MK_TST_SYMM_REL(eq);
174 MK_TST_SYMM_REL(neq);
175 MK_TST_REL(lt);
176 MK_TST_REL(gt);
177 MK_TST_REL(le);
178 MK_TST_REL(ge);
179
tst2()180 static void tst2() {
181 tst_eq(0, EN_NUMERAL, 0, EN_NUMERAL, true);
182 tst_eq(0, EN_NUMERAL, 2, EN_NUMERAL, false);
183 tst_eq(3, EN_NUMERAL, 0, EN_NUMERAL, false);
184 tst_eq(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, false);
185 tst_eq(0, EN_PLUS_INFINITY, 3, EN_NUMERAL, false);
186 tst_eq(0, EN_PLUS_INFINITY, -2, EN_NUMERAL, false);
187 tst_eq(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, false);
188
189 tst_neq(0, EN_NUMERAL, 0, EN_NUMERAL, false);
190 tst_neq(0, EN_NUMERAL, 2, EN_NUMERAL, true);
191 tst_neq(3, EN_NUMERAL, 0, EN_NUMERAL, true);
192 tst_neq(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, true);
193 tst_neq(0, EN_PLUS_INFINITY, 3, EN_NUMERAL, true);
194 tst_neq(0, EN_PLUS_INFINITY, -2, EN_NUMERAL, true);
195 tst_neq(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, true);
196
197 tst_lt(0, EN_MINUS_INFINITY, 10, EN_NUMERAL, true);
198 tst_lt(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, true);
199 tst_lt(0, EN_MINUS_INFINITY, -3, EN_NUMERAL, true);
200 tst_lt(30, EN_MINUS_INFINITY, 10, EN_NUMERAL, true);
201 tst_lt(20, EN_MINUS_INFINITY, 0, EN_NUMERAL, true);
202 tst_lt(-20, EN_MINUS_INFINITY, -3, EN_NUMERAL, true);
203 tst_lt(0, EN_MINUS_INFINITY, 10, EN_PLUS_INFINITY, true);
204 tst_lt(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, true);
205 tst_lt(10, EN_MINUS_INFINITY, -30, EN_PLUS_INFINITY, true);
206
207 tst_lt(0, EN_PLUS_INFINITY, 10, EN_NUMERAL, false);
208 tst_lt(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, false);
209 tst_lt(0, EN_PLUS_INFINITY, -3, EN_NUMERAL, false);
210 tst_lt(30, EN_PLUS_INFINITY, 10, EN_NUMERAL, false);
211 tst_lt(20, EN_PLUS_INFINITY, 0, EN_NUMERAL, false);
212 tst_lt(-20, EN_PLUS_INFINITY, -3, EN_NUMERAL, false);
213 tst_lt(0, EN_PLUS_INFINITY, 10, EN_MINUS_INFINITY, false);
214 tst_lt(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, false);
215 tst_lt(10, EN_PLUS_INFINITY, -30, EN_MINUS_INFINITY, false);
216
217 tst_lt(0, EN_NUMERAL, 0, EN_PLUS_INFINITY, true);
218 tst_lt(20, EN_NUMERAL, 10, EN_PLUS_INFINITY, true);
219 tst_lt(-20, EN_NUMERAL, -100, EN_PLUS_INFINITY, true);
220 tst_lt(0, EN_NUMERAL, 10, EN_NUMERAL, true);
221 tst_lt(0, EN_NUMERAL, 0, EN_NUMERAL, false);
222 tst_lt(10, EN_NUMERAL, 10, EN_NUMERAL, false);
223 tst_lt(0, EN_NUMERAL, -3, EN_NUMERAL, false);
224 tst_lt(30, EN_NUMERAL, 10, EN_NUMERAL, false);
225 tst_lt(30, EN_NUMERAL, 40, EN_NUMERAL, true);
226 tst_lt(20, EN_NUMERAL, 0, EN_NUMERAL, false);
227 tst_lt(-20, EN_NUMERAL, -3, EN_NUMERAL, true);
228 tst_lt(0, EN_NUMERAL, 10, EN_MINUS_INFINITY, false);
229 tst_lt(0, EN_NUMERAL, 0, EN_MINUS_INFINITY, false);
230 tst_lt(10, EN_NUMERAL, -30, EN_MINUS_INFINITY, false);
231
232 tst_le(0, EN_MINUS_INFINITY, 10, EN_NUMERAL, true);
233 tst_le(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, true);
234 tst_le(0, EN_MINUS_INFINITY, -3, EN_NUMERAL, true);
235 tst_le(30, EN_MINUS_INFINITY, 10, EN_NUMERAL, true);
236 tst_le(20, EN_MINUS_INFINITY, 0, EN_NUMERAL, true);
237 tst_le(-20, EN_MINUS_INFINITY, -3, EN_NUMERAL, true);
238 tst_le(0, EN_MINUS_INFINITY, 10, EN_PLUS_INFINITY, true);
239 tst_le(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, true);
240 tst_le(10, EN_MINUS_INFINITY, -30, EN_PLUS_INFINITY, true);
241
242 tst_le(0, EN_PLUS_INFINITY, 10, EN_NUMERAL, false);
243 tst_le(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, false);
244 tst_le(0, EN_PLUS_INFINITY, -3, EN_NUMERAL, false);
245 tst_le(30, EN_PLUS_INFINITY, 10, EN_NUMERAL, false);
246 tst_le(20, EN_PLUS_INFINITY, 0, EN_NUMERAL, false);
247 tst_le(-20, EN_PLUS_INFINITY, -3, EN_NUMERAL, false);
248 tst_le(0, EN_PLUS_INFINITY, 10, EN_MINUS_INFINITY, false);
249 tst_le(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, false);
250 tst_le(10, EN_PLUS_INFINITY, -30, EN_MINUS_INFINITY, false);
251
252 tst_le(0, EN_NUMERAL, 0, EN_PLUS_INFINITY, true);
253 tst_le(20, EN_NUMERAL, 10, EN_PLUS_INFINITY, true);
254 tst_le(-20, EN_NUMERAL, -100, EN_PLUS_INFINITY, true);
255 tst_le(0, EN_NUMERAL, 10, EN_NUMERAL, true);
256 tst_le(0, EN_NUMERAL, 0, EN_NUMERAL, true);
257 tst_le(10, EN_NUMERAL, 10, EN_NUMERAL, true);
258 tst_le(0, EN_NUMERAL, -3, EN_NUMERAL, false);
259 tst_le(30, EN_NUMERAL, 10, EN_NUMERAL, false);
260 tst_le(30, EN_NUMERAL, 40, EN_NUMERAL, true);
261 tst_le(20, EN_NUMERAL, 0, EN_NUMERAL, false);
262 tst_le(-20, EN_NUMERAL, -3, EN_NUMERAL, true);
263 tst_le(0, EN_NUMERAL, 10, EN_MINUS_INFINITY, false);
264 tst_le(0, EN_NUMERAL, 0, EN_MINUS_INFINITY, false);
265 tst_le(10, EN_NUMERAL, -30, EN_MINUS_INFINITY, false);
266
267
268 tst_ge(0, EN_MINUS_INFINITY, 10, EN_NUMERAL, false);
269 tst_ge(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, false);
270 tst_ge(0, EN_MINUS_INFINITY, -3, EN_NUMERAL, false);
271 tst_ge(30, EN_MINUS_INFINITY, 10, EN_NUMERAL, false);
272 tst_ge(20, EN_MINUS_INFINITY, 0, EN_NUMERAL, false);
273 tst_ge(-20, EN_MINUS_INFINITY, -3, EN_NUMERAL, false);
274 tst_ge(0, EN_MINUS_INFINITY, 10, EN_PLUS_INFINITY, false);
275 tst_ge(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, false);
276 tst_ge(10, EN_MINUS_INFINITY, -30, EN_PLUS_INFINITY, false);
277
278 tst_ge(0, EN_PLUS_INFINITY, 10, EN_NUMERAL, true);
279 tst_ge(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, true);
280 tst_ge(0, EN_PLUS_INFINITY, -3, EN_NUMERAL, true);
281 tst_ge(30, EN_PLUS_INFINITY, 10, EN_NUMERAL, true);
282 tst_ge(20, EN_PLUS_INFINITY, 0, EN_NUMERAL, true);
283 tst_ge(-20, EN_PLUS_INFINITY, -3, EN_NUMERAL, true);
284 tst_ge(0, EN_PLUS_INFINITY, 10, EN_MINUS_INFINITY, true);
285 tst_ge(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, true);
286 tst_ge(10, EN_PLUS_INFINITY, -30, EN_MINUS_INFINITY, true);
287
288 tst_ge(0, EN_NUMERAL, 0, EN_PLUS_INFINITY, false);
289 tst_ge(20, EN_NUMERAL, 10, EN_PLUS_INFINITY, false);
290 tst_ge(-20, EN_NUMERAL, -100, EN_PLUS_INFINITY, false);
291 tst_ge(0, EN_NUMERAL, 10, EN_NUMERAL, false);
292 tst_ge(0, EN_NUMERAL, 0, EN_NUMERAL, true);
293 tst_ge(10, EN_NUMERAL, 10, EN_NUMERAL, true);
294 tst_ge(0, EN_NUMERAL, -3, EN_NUMERAL, true);
295 tst_ge(30, EN_NUMERAL, 10, EN_NUMERAL, true);
296 tst_ge(30, EN_NUMERAL, 40, EN_NUMERAL, false);
297 tst_ge(20, EN_NUMERAL, 0, EN_NUMERAL, true);
298 tst_ge(-20, EN_NUMERAL, -3, EN_NUMERAL, false);
299 tst_ge(0, EN_NUMERAL, 10, EN_MINUS_INFINITY, true);
300 tst_ge(0, EN_NUMERAL, 0, EN_MINUS_INFINITY, true);
301 tst_ge(10, EN_NUMERAL, -30, EN_MINUS_INFINITY, true);
302
303
304 tst_gt(0, EN_MINUS_INFINITY, 10, EN_NUMERAL, false);
305 tst_gt(0, EN_MINUS_INFINITY, 0, EN_NUMERAL, false);
306 tst_gt(0, EN_MINUS_INFINITY, -3, EN_NUMERAL, false);
307 tst_gt(30, EN_MINUS_INFINITY, 10, EN_NUMERAL, false);
308 tst_gt(20, EN_MINUS_INFINITY, 0, EN_NUMERAL, false);
309 tst_gt(-20, EN_MINUS_INFINITY, -3, EN_NUMERAL, false);
310 tst_gt(0, EN_MINUS_INFINITY, 10, EN_PLUS_INFINITY, false);
311 tst_gt(0, EN_MINUS_INFINITY, 0, EN_PLUS_INFINITY, false);
312 tst_gt(10, EN_MINUS_INFINITY, -30, EN_PLUS_INFINITY, false);
313
314 tst_gt(0, EN_PLUS_INFINITY, 10, EN_NUMERAL, true);
315 tst_gt(0, EN_PLUS_INFINITY, 0, EN_NUMERAL, true);
316 tst_gt(0, EN_PLUS_INFINITY, -3, EN_NUMERAL, true);
317 tst_gt(30, EN_PLUS_INFINITY, 10, EN_NUMERAL, true);
318 tst_gt(20, EN_PLUS_INFINITY, 0, EN_NUMERAL, true);
319 tst_gt(-20, EN_PLUS_INFINITY, -3, EN_NUMERAL, true);
320 tst_gt(0, EN_PLUS_INFINITY, 10, EN_MINUS_INFINITY, true);
321 tst_gt(0, EN_PLUS_INFINITY, 0, EN_MINUS_INFINITY, true);
322 tst_gt(10, EN_PLUS_INFINITY, -30, EN_MINUS_INFINITY, true);
323
324 tst_gt(0, EN_NUMERAL, 0, EN_PLUS_INFINITY, false);
325 tst_gt(20, EN_NUMERAL, 10, EN_PLUS_INFINITY, false);
326 tst_gt(-20, EN_NUMERAL, -100, EN_PLUS_INFINITY, false);
327 tst_gt(0, EN_NUMERAL, 10, EN_NUMERAL, false);
328 tst_gt(0, EN_NUMERAL, 0, EN_NUMERAL, false);
329 tst_gt(10, EN_NUMERAL, 10, EN_NUMERAL, false);
330 tst_gt(0, EN_NUMERAL, -3, EN_NUMERAL, true);
331 tst_gt(30, EN_NUMERAL, 10, EN_NUMERAL, true);
332 tst_gt(30, EN_NUMERAL, 40, EN_NUMERAL, false);
333 tst_gt(20, EN_NUMERAL, 0, EN_NUMERAL, true);
334 tst_gt(-20, EN_NUMERAL, -3, EN_NUMERAL, false);
335 tst_gt(0, EN_NUMERAL, 10, EN_MINUS_INFINITY, true);
336 tst_gt(0, EN_NUMERAL, 0, EN_MINUS_INFINITY, true);
337 tst_gt(10, EN_NUMERAL, -30, EN_MINUS_INFINITY, true);
338 }
339
tst3()340 static void tst3() {
341 unsynch_mpq_manager m;
342 scoped_mpq a(m);
343 ENSURE(is_zero(m, a, EN_NUMERAL));
344 ENSURE(!is_zero(m, a, EN_PLUS_INFINITY));
345 ENSURE(!is_zero(m, a, EN_MINUS_INFINITY));
346 ENSURE(!is_pos(m, a, EN_NUMERAL));
347 ENSURE(is_pos(m, a, EN_PLUS_INFINITY));
348 ENSURE(!is_pos(m, a, EN_MINUS_INFINITY));
349 ENSURE(!is_infinite(EN_NUMERAL));
350 ENSURE(is_infinite(EN_PLUS_INFINITY));
351 ENSURE(is_infinite(EN_MINUS_INFINITY));
352 ENSURE(!is_neg(m, a, EN_NUMERAL));
353 ENSURE(!is_neg(m, a, EN_PLUS_INFINITY));
354 ENSURE(is_neg(m, a, EN_MINUS_INFINITY));
355 m.set(a, 10);
356 ENSURE(!is_zero(m, a, EN_NUMERAL));
357 ENSURE(is_pos(m, a, EN_NUMERAL));
358 ENSURE(!is_neg(m, a, EN_NUMERAL));
359 ENSURE(!is_infinite(EN_NUMERAL));
360 m.set(a, -5);
361 ENSURE(!is_zero(m, a, EN_NUMERAL));
362 ENSURE(!is_pos(m, a, EN_NUMERAL));
363 ENSURE(is_neg(m, a, EN_NUMERAL));
364 ENSURE(!is_infinite(EN_NUMERAL));
365 ext_numeral_kind ak;
366 ak = EN_MINUS_INFINITY;
367 reset(m, a, ak);
368 ENSURE(is_zero(m, a, EN_NUMERAL));
369 {
370 std::ostringstream buffer;
371 display(buffer, m, a, ak);
372 ENSURE(buffer.str() == "0");
373 }
374 {
375 std::ostringstream buffer;
376 m.set(a, -10);
377 display(buffer, m, a, ak);
378 ENSURE(buffer.str() == "-10");
379 }
380 {
381 std::ostringstream buffer;
382 display(buffer, m, a, EN_PLUS_INFINITY);
383 ENSURE(buffer.str() == "+oo");
384 }
385 {
386 std::ostringstream buffer;
387 display(buffer, m, a, EN_MINUS_INFINITY);
388 ENSURE(buffer.str() == "-oo");
389 }
390 }
391
tst_ext_numeral()392 void tst_ext_numeral() {
393 tst1();
394 tst2();
395 tst3();
396 }
397