1// Copyright (C) 2009 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library.  This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3.  If not see
16// <http://www.gnu.org/licenses/>.
17
18// { dg-require-effective-target dfp }
19
20// ISO/IEC TR 24733  3.2.9  Comparison operators.
21
22#include <decimal/decimal>
23#include <testsuite_hooks.h>
24
25using namespace std::decimal;
26
27decimal32 d32 (5);
28decimal64 d64 (-10);
29decimal128 d128 (25);
30int si = -20;
31unsigned int ui = 50;
32long sl = -10;
33unsigned long ul = 20;
34long long sll = -25;
35unsigned long long ull = 50;
36
37void
38compare_eq_32 (void)
39{
40  decimal32 a;
41
42  a = si;   VERIFY (a == si);   VERIFY (si == a);
43  a = ui;   VERIFY (a == ui);   VERIFY (ui == a);
44  a = sl;   VERIFY (a == sl);   VERIFY (sl == a);
45  a = ul;   VERIFY (a == ul);   VERIFY (ul == a);
46  a = sll;  VERIFY (a == sll);  VERIFY (sll == a);
47  a = ull;  VERIFY (a == ull);  VERIFY (ull == a);
48  a = d32;  VERIFY (a == d32);  VERIFY (d32 == a);
49  a = (decimal32)d64;  VERIFY (a == d64);  VERIFY (d64 == a);
50  a = (decimal32)d128; VERIFY (a == d128); VERIFY (d128 == a);
51}
52
53void
54compare_ne_32 (void)
55{
56  decimal32 a = 100;
57
58  VERIFY (a != si);   VERIFY (si != a);
59  VERIFY (a != ui);   VERIFY (ui != a);
60  VERIFY (a != sl);   VERIFY (sl != a);
61  VERIFY (a != ul);   VERIFY (ul != a);
62  VERIFY (a != sll);  VERIFY (sll != a);
63  VERIFY (a != ull);  VERIFY (ull != a);
64  VERIFY (a != d32);  VERIFY (d32 != a);
65  VERIFY (a != d64);  VERIFY (d64 != a);
66  VERIFY (a != d128); VERIFY (d128 != a);
67}
68
69void
70compare_lt_32 (void)
71{
72  decimal32 a = -100;
73
74  VERIFY (a < si);
75  VERIFY (a < ui);
76  VERIFY (a < sl);
77  VERIFY (a < ul);
78  VERIFY (a < sll);
79  VERIFY (a < ull);
80  VERIFY (a < d32);
81  VERIFY (a < d64);
82  VERIFY (a < d128);
83
84  a = 100;
85  VERIFY (si < a);
86  VERIFY (ui < a);
87  VERIFY (sl < a);
88  VERIFY (ul < a);
89  VERIFY (sll < a);
90  VERIFY (ull < a);
91  VERIFY (d32 < a);
92  VERIFY (d64 < a);
93  VERIFY (d128 < a);
94}
95
96void
97compare_le_32 (void)
98{
99  decimal32 a;
100
101  a = si;   VERIFY (a <= si);   VERIFY (si <= a);
102  a = ui;   VERIFY (a <= ui);   VERIFY (ui <= a);
103  a = sl;   VERIFY (a <= sl);   VERIFY (sl <= a);
104  a = ul;   VERIFY (a <= ul);   VERIFY (ul <= a);
105  a = sll;  VERIFY (a <= sll);  VERIFY (sll <= a);
106  a = ull;  VERIFY (a <= ull);  VERIFY (ull <= a);
107  a = d32;  VERIFY (a <= d32);  VERIFY (d32 <= a);
108  a = (decimal32)d64;  VERIFY (a <= d64);  VERIFY (d64 <= a);
109  a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a);
110
111  a = -100;
112  VERIFY (a <= si);
113  VERIFY (a <= ui);
114  VERIFY (a <= sl);
115  VERIFY (a <= ul);
116  VERIFY (a <= sll);
117  VERIFY (a <= ull);
118  VERIFY (a <= d32);
119  VERIFY (a <= d64);
120  VERIFY (a <= d128);
121
122  a = 100;
123  VERIFY (si <= a);
124  VERIFY (ui <= a);
125  VERIFY (sl <= a);
126  VERIFY (ul <= a);
127  VERIFY (sll <= a);
128  VERIFY (ull <= a);
129  VERIFY (d32 <= a);
130  VERIFY (d64 <= a);
131  VERIFY (d128 <= a);
132}
133
134void
135compare_gt_32 (void)
136{
137  decimal32 a = 100;
138
139  VERIFY (a > si);
140  VERIFY (a > ui);
141  VERIFY (a > sl);
142  VERIFY (a > ul);
143  VERIFY (a > sll);
144  VERIFY (a > ull);
145  VERIFY (a > d32);
146  VERIFY (a > d64);
147  VERIFY (a > d128);
148
149  a = -100;
150  VERIFY (si > a);
151  VERIFY (ui > a);
152  VERIFY (sl > a);
153  VERIFY (ul > a);
154  VERIFY (sll > a);
155  VERIFY (ull > a);
156  VERIFY (d32 > a);
157  VERIFY (d64 > a);
158  VERIFY (d128 > a);
159}
160
161void
162compare_ge_32 (void)
163{
164  decimal32 a;
165
166  a = si;   VERIFY (a >= si);   VERIFY (si <= a);
167  a = ui;   VERIFY (a >= ui);   VERIFY (ui <= a);
168  a = sl;   VERIFY (a >= sl);   VERIFY (sl <= a);
169  a = ul;   VERIFY (a >= ul);   VERIFY (ul <= a);
170  a = sll;  VERIFY (a >= sll);  VERIFY (sll <= a);
171  a = ull;  VERIFY (a >= ull);  VERIFY (ull <= a);
172  a = d32;  VERIFY (a >= d32);  VERIFY (d32 <= a);
173  a = (decimal32)d64;  VERIFY (a >= d64);  VERIFY (d64 <= a);
174  a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a);
175
176  a = 100;
177  VERIFY (a >= si);
178  VERIFY (a >= ui);
179  VERIFY (a >= sl);
180  VERIFY (a >= ul);
181  VERIFY (a >= sll);
182  VERIFY (a >= ull);
183  VERIFY (a >= d32);
184  VERIFY (a >= d64);
185  VERIFY (a >= d128);
186
187  a = -100;
188  VERIFY (si >= a);
189  VERIFY (ui >= a);
190  VERIFY (sl >= a);
191  VERIFY (ul >= a);
192  VERIFY (sll >= a);
193  VERIFY (ull >= a);
194  VERIFY (d32 >= a);
195  VERIFY (d64 >= a);
196  VERIFY (d128 >= a);
197}
198
199void
200compare_eq_64 (void)
201{
202  decimal64 a;
203
204  a = si;   VERIFY (a == si);   VERIFY (si == a);
205  a = ui;   VERIFY (a == ui);   VERIFY (ui == a);
206  a = sl;   VERIFY (a == sl);   VERIFY (sl == a);
207  a = ul;   VERIFY (a == ul);   VERIFY (ul == a);
208  a = sll;  VERIFY (a == sll);  VERIFY (sll == a);
209  a = ull;  VERIFY (a == ull);  VERIFY (ull == a);
210  a = d32;  VERIFY (a == d32);  VERIFY (d32 == a);
211  a = d64;  VERIFY (a == d64);  VERIFY (d64 == a);
212  a = (decimal64)d128; VERIFY (a == d128); VERIFY (d128 == a);
213}
214
215void
216compare_ne_64 (void)
217{
218  decimal64 a = 100;
219
220  VERIFY (a != si);   VERIFY (si != a);
221  VERIFY (a != ui);   VERIFY (ui != a);
222  VERIFY (a != sl);   VERIFY (sl != a);
223  VERIFY (a != ul);   VERIFY (ul != a);
224  VERIFY (a != sll);  VERIFY (sll != a);
225  VERIFY (a != ull);  VERIFY (ull != a);
226  VERIFY (a != d32);  VERIFY (d32 != a);
227  VERIFY (a != d64);  VERIFY (d64 != a);
228  VERIFY (a != d128); VERIFY (d128 != a);
229}
230
231void
232compare_lt_64 (void)
233{
234  decimal64 a = -100;
235
236  VERIFY (a < si);
237  VERIFY (a < ui);
238  VERIFY (a < sl);
239  VERIFY (a < ul);
240  VERIFY (a < sll);
241  VERIFY (a < ull);
242  VERIFY (a < d32);
243  VERIFY (a < d64);
244  VERIFY (a < d128);
245
246  a = 100;
247  VERIFY (si < a);
248  VERIFY (ui < a);
249  VERIFY (sl < a);
250  VERIFY (ul < a);
251  VERIFY (sll < a);
252  VERIFY (ull < a);
253  VERIFY (d32 < a);
254  VERIFY (d64 < a);
255  VERIFY (d128 < a);
256}
257
258void
259compare_le_64 (void)
260{
261  decimal64 a;
262
263  a = si;   VERIFY (a <= si);   VERIFY (si <= a);
264  a = ui;   VERIFY (a <= ui);   VERIFY (ui <= a);
265  a = sl;   VERIFY (a <= sl);   VERIFY (sl <= a);
266  a = ul;   VERIFY (a <= ul);   VERIFY (ul <= a);
267  a = sll;  VERIFY (a <= sll);  VERIFY (sll <= a);
268  a = ull;  VERIFY (a <= ull);  VERIFY (ull <= a);
269  a = d32;  VERIFY (a <= d32);  VERIFY (d32 <= a);
270  a = (decimal32)d64;  VERIFY (a <= d64);  VERIFY (d64 <= a);
271  a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a);
272
273  a = -100;
274  VERIFY (a <= si);
275  VERIFY (a <= ui);
276  VERIFY (a <= sl);
277  VERIFY (a <= ul);
278  VERIFY (a <= sll);
279  VERIFY (a <= ull);
280  VERIFY (a <= d32);
281  VERIFY (a <= d64);
282  VERIFY (a <= d128);
283
284  a = 100;
285  VERIFY (si <= a);
286  VERIFY (ui <= a);
287  VERIFY (sl <= a);
288  VERIFY (ul <= a);
289  VERIFY (sll <= a);
290  VERIFY (ull <= a);
291  VERIFY (d32 <= a);
292  VERIFY (d64 <= a);
293  VERIFY (d128 <= a);
294}
295
296void
297compare_gt_64 (void)
298{
299  decimal64 a = 100;
300
301  VERIFY (a > si);
302  VERIFY (a > ui);
303  VERIFY (a > sl);
304  VERIFY (a > ul);
305  VERIFY (a > sll);
306  VERIFY (a > ull);
307  VERIFY (a > d32);
308  VERIFY (a > d64);
309  VERIFY (a > d128);
310
311  a = -100;
312  VERIFY (si > a);
313  VERIFY (ui > a);
314  VERIFY (sl > a);
315  VERIFY (ul > a);
316  VERIFY (sll > a);
317  VERIFY (ull > a);
318  VERIFY (d32 > a);
319  VERIFY (d64 > a);
320  VERIFY (d128 > a);
321}
322
323void
324compare_ge_64 (void)
325{
326  decimal64 a;
327
328  a = si;   VERIFY (a >= si);   VERIFY (si <= a);
329  a = ui;   VERIFY (a >= ui);   VERIFY (ui <= a);
330  a = sl;   VERIFY (a >= sl);   VERIFY (sl <= a);
331  a = ul;   VERIFY (a >= ul);   VERIFY (ul <= a);
332  a = sll;  VERIFY (a >= sll);  VERIFY (sll <= a);
333  a = ull;  VERIFY (a >= ull);  VERIFY (ull <= a);
334  a = d32;  VERIFY (a >= d32);  VERIFY (d32 <= a);
335  a = (decimal32)d64;  VERIFY (a >= d64);  VERIFY (d64 <= a);
336  a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a);
337
338  a = 100;
339  VERIFY (a >= si);
340  VERIFY (a >= ui);
341  VERIFY (a >= sl);
342  VERIFY (a >= ul);
343  VERIFY (a >= sll);
344  VERIFY (a >= ull);
345  VERIFY (a >= d32);
346  VERIFY (a >= d64);
347  VERIFY (a >= d128);
348
349  a = -100;
350  VERIFY (si >= a);
351  VERIFY (ui >= a);
352  VERIFY (sl >= a);
353  VERIFY (ul >= a);
354  VERIFY (sll >= a);
355  VERIFY (ull >= a);
356  VERIFY (d32 >= a);
357  VERIFY (d64 >= a);
358  VERIFY (d128 >= a);
359}
360
361void
362compare_eq_128 (void)
363{
364  decimal128 a;
365
366  a = si;   VERIFY (a == si);   VERIFY (si == a);
367  a = ui;   VERIFY (a == ui);   VERIFY (ui == a);
368  a = sl;   VERIFY (a == sl);   VERIFY (sl == a);
369  a = ul;   VERIFY (a == ul);   VERIFY (ul == a);
370  a = sll;  VERIFY (a == sll);  VERIFY (sll == a);
371  a = ull;  VERIFY (a == ull);  VERIFY (ull == a);
372  a = d32;  VERIFY (a == d32);  VERIFY (d32 == a);
373  a = d64;  VERIFY (a == d64);  VERIFY (d64 == a);
374  a = d128; VERIFY (a == d128); VERIFY (d128 == a);
375}
376
377void
378compare_ne_128 (void)
379{
380  decimal128 a = 100;
381
382  VERIFY (a != si);   VERIFY (si != a);
383  VERIFY (a != ui);   VERIFY (ui != a);
384  VERIFY (a != sl);   VERIFY (sl != a);
385  VERIFY (a != ul);   VERIFY (ul != a);
386  VERIFY (a != sll);  VERIFY (sll != a);
387  VERIFY (a != ull);  VERIFY (ull != a);
388  VERIFY (a != d32);  VERIFY (d32 != a);
389  VERIFY (a != d64);  VERIFY (d64 != a);
390  VERIFY (a != d128); VERIFY (d128 != a);
391}
392
393void
394compare_lt_128 (void)
395{
396  decimal128 a = -100;
397
398  VERIFY (a < si);
399  VERIFY (a < ui);
400  VERIFY (a < sl);
401  VERIFY (a < ul);
402  VERIFY (a < sll);
403  VERIFY (a < ull);
404  VERIFY (a < d32);
405  VERIFY (a < d64);
406  VERIFY (a < d128);
407
408  a = 100;
409  VERIFY (si < a);
410  VERIFY (ui < a);
411  VERIFY (sl < a);
412  VERIFY (ul < a);
413  VERIFY (sll < a);
414  VERIFY (ull < a);
415  VERIFY (d32 < a);
416  VERIFY (d64 < a);
417  VERIFY (d128 < a);
418}
419
420void
421compare_le_128 (void)
422{
423  decimal128 a;
424
425  a = si;   VERIFY (a <= si);   VERIFY (si <= a);
426  a = ui;   VERIFY (a <= ui);   VERIFY (ui <= a);
427  a = sl;   VERIFY (a <= sl);   VERIFY (sl <= a);
428  a = ul;   VERIFY (a <= ul);   VERIFY (ul <= a);
429  a = sll;  VERIFY (a <= sll);  VERIFY (sll <= a);
430  a = ull;  VERIFY (a <= ull);  VERIFY (ull <= a);
431  a = d32;  VERIFY (a <= d32);  VERIFY (d32 <= a);
432  a = (decimal32)d64;  VERIFY (a <= d64);  VERIFY (d64 <= a);
433  a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a);
434
435  a = -100;
436  VERIFY (a <= si);
437  VERIFY (a <= ui);
438  VERIFY (a <= sl);
439  VERIFY (a <= ul);
440  VERIFY (a <= sll);
441  VERIFY (a <= ull);
442  VERIFY (a <= d32);
443  VERIFY (a <= d64);
444  VERIFY (a <= d128);
445
446  a = 100;
447  VERIFY (si <= a);
448  VERIFY (ui <= a);
449  VERIFY (sl <= a);
450  VERIFY (ul <= a);
451  VERIFY (sll <= a);
452  VERIFY (ull <= a);
453  VERIFY (d32 <= a);
454  VERIFY (d64 <= a);
455  VERIFY (d128 <= a);
456}
457
458void
459compare_gt_128 (void)
460{
461  decimal128 a = 100;
462
463  VERIFY (a > si);
464  VERIFY (a > ui);
465  VERIFY (a > sl);
466  VERIFY (a > ul);
467  VERIFY (a > sll);
468  VERIFY (a > ull);
469  VERIFY (a > d32);
470  VERIFY (a > d64);
471  VERIFY (a > d128);
472
473  a = -100;
474  VERIFY (si > a);
475  VERIFY (ui > a);
476  VERIFY (sl > a);
477  VERIFY (ul > a);
478  VERIFY (sll > a);
479  VERIFY (ull > a);
480  VERIFY (d32 > a);
481  VERIFY (d64 > a);
482  VERIFY (d128 > a);
483}
484
485void
486compare_ge_128 (void)
487{
488  decimal128 a;
489
490  a = si;   VERIFY (a >= si);   VERIFY (si <= a);
491  a = ui;   VERIFY (a >= ui);   VERIFY (ui <= a);
492  a = sl;   VERIFY (a >= sl);   VERIFY (sl <= a);
493  a = ul;   VERIFY (a >= ul);   VERIFY (ul <= a);
494  a = sll;  VERIFY (a >= sll);  VERIFY (sll <= a);
495  a = ull;  VERIFY (a >= ull);  VERIFY (ull <= a);
496  a = d32;  VERIFY (a >= d32);  VERIFY (d32 <= a);
497  a = (decimal32)d64;  VERIFY (a >= d64);  VERIFY (d64 <= a);
498  a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a);
499
500  a = 100;
501  VERIFY (a >= si);
502  VERIFY (a >= ui);
503  VERIFY (a >= sl);
504  VERIFY (a >= ul);
505  VERIFY (a >= sll);
506  VERIFY (a >= ull);
507  VERIFY (a >= d32);
508  VERIFY (a >= d64);
509  VERIFY (a >= d128);
510
511  a = -100;
512  VERIFY (si >= a);
513  VERIFY (ui >= a);
514  VERIFY (sl >= a);
515  VERIFY (ul >= a);
516  VERIFY (sll >= a);
517  VERIFY (ull >= a);
518  VERIFY (d32 >= a);
519  VERIFY (d64 >= a);
520  VERIFY (d128 >= a);
521}
522
523int
524main ()
525{
526  compare_eq_32 ();
527  compare_ne_32 ();
528  compare_lt_32 ();
529  compare_le_32 ();
530  compare_gt_32 ();
531  compare_ge_32 ();
532
533  compare_eq_64 ();
534  compare_ne_64 ();
535  compare_lt_64 ();
536  compare_le_64 ();
537  compare_gt_64 ();
538  compare_ge_64 ();
539
540  compare_eq_128 ();
541  compare_ne_128 ();
542  compare_lt_128 ();
543  compare_le_128 ();
544  compare_gt_128 ();
545  compare_ge_128 ();
546}
547