| // Copyright (C) 2009-2022 Free Software Foundation, Inc. |
| // |
| // This file is part of the GNU ISO C++ Library. This library is free |
| // software; you can redistribute it and/or modify it under the |
| // terms of the GNU General Public License as published by the |
| // Free Software Foundation; either version 3, or (at your option) |
| // any later version. |
| |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| // You should have received a copy of the GNU General Public License along |
| // with this library; see the file COPYING3. If not see |
| // <http://www.gnu.org/licenses/>. |
| |
| // { dg-require-effective-target dfp } |
| |
| // ISO/IEC TR 24733 3.2.9 Comparison operators. |
| |
| #include <decimal/decimal> |
| #include <testsuite_hooks.h> |
| |
| using namespace std::decimal; |
| |
| decimal32 d32 (5); |
| decimal64 d64 (-10); |
| decimal128 d128 (25); |
| int si = -20; |
| unsigned int ui = 50; |
| long sl = -10; |
| unsigned long ul = 20; |
| long long sll = -25; |
| unsigned long long ull = 50; |
| |
| void |
| compare_eq_32 (void) |
| { |
| decimal32 a; |
| |
| a = si; VERIFY (a == si); VERIFY (si == a); |
| a = ui; VERIFY (a == ui); VERIFY (ui == a); |
| a = sl; VERIFY (a == sl); VERIFY (sl == a); |
| a = ul; VERIFY (a == ul); VERIFY (ul == a); |
| a = sll; VERIFY (a == sll); VERIFY (sll == a); |
| a = ull; VERIFY (a == ull); VERIFY (ull == a); |
| a = d32; VERIFY (a == d32); VERIFY (d32 == a); |
| a = (decimal32)d64; VERIFY (a == d64); VERIFY (d64 == a); |
| a = (decimal32)d128; VERIFY (a == d128); VERIFY (d128 == a); |
| } |
| |
| void |
| compare_ne_32 (void) |
| { |
| decimal32 a = 100; |
| |
| VERIFY (a != si); VERIFY (si != a); |
| VERIFY (a != ui); VERIFY (ui != a); |
| VERIFY (a != sl); VERIFY (sl != a); |
| VERIFY (a != ul); VERIFY (ul != a); |
| VERIFY (a != sll); VERIFY (sll != a); |
| VERIFY (a != ull); VERIFY (ull != a); |
| VERIFY (a != d32); VERIFY (d32 != a); |
| VERIFY (a != d64); VERIFY (d64 != a); |
| VERIFY (a != d128); VERIFY (d128 != a); |
| } |
| |
| void |
| compare_lt_32 (void) |
| { |
| decimal32 a = -100; |
| |
| VERIFY (a < si); |
| VERIFY (a < ui); |
| VERIFY (a < sl); |
| VERIFY (a < ul); |
| VERIFY (a < sll); |
| VERIFY (a < ull); |
| VERIFY (a < d32); |
| VERIFY (a < d64); |
| VERIFY (a < d128); |
| |
| a = 100; |
| VERIFY (si < a); |
| VERIFY (ui < a); |
| VERIFY (sl < a); |
| VERIFY (ul < a); |
| VERIFY (sll < a); |
| VERIFY (ull < a); |
| VERIFY (d32 < a); |
| VERIFY (d64 < a); |
| VERIFY (d128 < a); |
| } |
| |
| void |
| compare_le_32 (void) |
| { |
| decimal32 a; |
| |
| a = si; VERIFY (a <= si); VERIFY (si <= a); |
| a = ui; VERIFY (a <= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a <= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a <= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a <= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a <= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a <= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a <= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a); |
| |
| a = -100; |
| VERIFY (a <= si); |
| VERIFY (a <= ui); |
| VERIFY (a <= sl); |
| VERIFY (a <= ul); |
| VERIFY (a <= sll); |
| VERIFY (a <= ull); |
| VERIFY (a <= d32); |
| VERIFY (a <= d64); |
| VERIFY (a <= d128); |
| |
| a = 100; |
| VERIFY (si <= a); |
| VERIFY (ui <= a); |
| VERIFY (sl <= a); |
| VERIFY (ul <= a); |
| VERIFY (sll <= a); |
| VERIFY (ull <= a); |
| VERIFY (d32 <= a); |
| VERIFY (d64 <= a); |
| VERIFY (d128 <= a); |
| } |
| |
| void |
| compare_gt_32 (void) |
| { |
| decimal32 a = 100; |
| |
| VERIFY (a > si); |
| VERIFY (a > ui); |
| VERIFY (a > sl); |
| VERIFY (a > ul); |
| VERIFY (a > sll); |
| VERIFY (a > ull); |
| VERIFY (a > d32); |
| VERIFY (a > d64); |
| VERIFY (a > d128); |
| |
| a = -100; |
| VERIFY (si > a); |
| VERIFY (ui > a); |
| VERIFY (sl > a); |
| VERIFY (ul > a); |
| VERIFY (sll > a); |
| VERIFY (ull > a); |
| VERIFY (d32 > a); |
| VERIFY (d64 > a); |
| VERIFY (d128 > a); |
| } |
| |
| void |
| compare_ge_32 (void) |
| { |
| decimal32 a; |
| |
| a = si; VERIFY (a >= si); VERIFY (si <= a); |
| a = ui; VERIFY (a >= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a >= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a >= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a >= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a >= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a >= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a >= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a); |
| |
| a = 100; |
| VERIFY (a >= si); |
| VERIFY (a >= ui); |
| VERIFY (a >= sl); |
| VERIFY (a >= ul); |
| VERIFY (a >= sll); |
| VERIFY (a >= ull); |
| VERIFY (a >= d32); |
| VERIFY (a >= d64); |
| VERIFY (a >= d128); |
| |
| a = -100; |
| VERIFY (si >= a); |
| VERIFY (ui >= a); |
| VERIFY (sl >= a); |
| VERIFY (ul >= a); |
| VERIFY (sll >= a); |
| VERIFY (ull >= a); |
| VERIFY (d32 >= a); |
| VERIFY (d64 >= a); |
| VERIFY (d128 >= a); |
| } |
| |
| void |
| compare_eq_64 (void) |
| { |
| decimal64 a; |
| |
| a = si; VERIFY (a == si); VERIFY (si == a); |
| a = ui; VERIFY (a == ui); VERIFY (ui == a); |
| a = sl; VERIFY (a == sl); VERIFY (sl == a); |
| a = ul; VERIFY (a == ul); VERIFY (ul == a); |
| a = sll; VERIFY (a == sll); VERIFY (sll == a); |
| a = ull; VERIFY (a == ull); VERIFY (ull == a); |
| a = d32; VERIFY (a == d32); VERIFY (d32 == a); |
| a = d64; VERIFY (a == d64); VERIFY (d64 == a); |
| a = (decimal64)d128; VERIFY (a == d128); VERIFY (d128 == a); |
| } |
| |
| void |
| compare_ne_64 (void) |
| { |
| decimal64 a = 100; |
| |
| VERIFY (a != si); VERIFY (si != a); |
| VERIFY (a != ui); VERIFY (ui != a); |
| VERIFY (a != sl); VERIFY (sl != a); |
| VERIFY (a != ul); VERIFY (ul != a); |
| VERIFY (a != sll); VERIFY (sll != a); |
| VERIFY (a != ull); VERIFY (ull != a); |
| VERIFY (a != d32); VERIFY (d32 != a); |
| VERIFY (a != d64); VERIFY (d64 != a); |
| VERIFY (a != d128); VERIFY (d128 != a); |
| } |
| |
| void |
| compare_lt_64 (void) |
| { |
| decimal64 a = -100; |
| |
| VERIFY (a < si); |
| VERIFY (a < ui); |
| VERIFY (a < sl); |
| VERIFY (a < ul); |
| VERIFY (a < sll); |
| VERIFY (a < ull); |
| VERIFY (a < d32); |
| VERIFY (a < d64); |
| VERIFY (a < d128); |
| |
| a = 100; |
| VERIFY (si < a); |
| VERIFY (ui < a); |
| VERIFY (sl < a); |
| VERIFY (ul < a); |
| VERIFY (sll < a); |
| VERIFY (ull < a); |
| VERIFY (d32 < a); |
| VERIFY (d64 < a); |
| VERIFY (d128 < a); |
| } |
| |
| void |
| compare_le_64 (void) |
| { |
| decimal64 a; |
| |
| a = si; VERIFY (a <= si); VERIFY (si <= a); |
| a = ui; VERIFY (a <= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a <= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a <= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a <= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a <= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a <= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a <= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a); |
| |
| a = -100; |
| VERIFY (a <= si); |
| VERIFY (a <= ui); |
| VERIFY (a <= sl); |
| VERIFY (a <= ul); |
| VERIFY (a <= sll); |
| VERIFY (a <= ull); |
| VERIFY (a <= d32); |
| VERIFY (a <= d64); |
| VERIFY (a <= d128); |
| |
| a = 100; |
| VERIFY (si <= a); |
| VERIFY (ui <= a); |
| VERIFY (sl <= a); |
| VERIFY (ul <= a); |
| VERIFY (sll <= a); |
| VERIFY (ull <= a); |
| VERIFY (d32 <= a); |
| VERIFY (d64 <= a); |
| VERIFY (d128 <= a); |
| } |
| |
| void |
| compare_gt_64 (void) |
| { |
| decimal64 a = 100; |
| |
| VERIFY (a > si); |
| VERIFY (a > ui); |
| VERIFY (a > sl); |
| VERIFY (a > ul); |
| VERIFY (a > sll); |
| VERIFY (a > ull); |
| VERIFY (a > d32); |
| VERIFY (a > d64); |
| VERIFY (a > d128); |
| |
| a = -100; |
| VERIFY (si > a); |
| VERIFY (ui > a); |
| VERIFY (sl > a); |
| VERIFY (ul > a); |
| VERIFY (sll > a); |
| VERIFY (ull > a); |
| VERIFY (d32 > a); |
| VERIFY (d64 > a); |
| VERIFY (d128 > a); |
| } |
| |
| void |
| compare_ge_64 (void) |
| { |
| decimal64 a; |
| |
| a = si; VERIFY (a >= si); VERIFY (si <= a); |
| a = ui; VERIFY (a >= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a >= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a >= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a >= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a >= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a >= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a >= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a); |
| |
| a = 100; |
| VERIFY (a >= si); |
| VERIFY (a >= ui); |
| VERIFY (a >= sl); |
| VERIFY (a >= ul); |
| VERIFY (a >= sll); |
| VERIFY (a >= ull); |
| VERIFY (a >= d32); |
| VERIFY (a >= d64); |
| VERIFY (a >= d128); |
| |
| a = -100; |
| VERIFY (si >= a); |
| VERIFY (ui >= a); |
| VERIFY (sl >= a); |
| VERIFY (ul >= a); |
| VERIFY (sll >= a); |
| VERIFY (ull >= a); |
| VERIFY (d32 >= a); |
| VERIFY (d64 >= a); |
| VERIFY (d128 >= a); |
| } |
| |
| void |
| compare_eq_128 (void) |
| { |
| decimal128 a; |
| |
| a = si; VERIFY (a == si); VERIFY (si == a); |
| a = ui; VERIFY (a == ui); VERIFY (ui == a); |
| a = sl; VERIFY (a == sl); VERIFY (sl == a); |
| a = ul; VERIFY (a == ul); VERIFY (ul == a); |
| a = sll; VERIFY (a == sll); VERIFY (sll == a); |
| a = ull; VERIFY (a == ull); VERIFY (ull == a); |
| a = d32; VERIFY (a == d32); VERIFY (d32 == a); |
| a = d64; VERIFY (a == d64); VERIFY (d64 == a); |
| a = d128; VERIFY (a == d128); VERIFY (d128 == a); |
| } |
| |
| void |
| compare_ne_128 (void) |
| { |
| decimal128 a = 100; |
| |
| VERIFY (a != si); VERIFY (si != a); |
| VERIFY (a != ui); VERIFY (ui != a); |
| VERIFY (a != sl); VERIFY (sl != a); |
| VERIFY (a != ul); VERIFY (ul != a); |
| VERIFY (a != sll); VERIFY (sll != a); |
| VERIFY (a != ull); VERIFY (ull != a); |
| VERIFY (a != d32); VERIFY (d32 != a); |
| VERIFY (a != d64); VERIFY (d64 != a); |
| VERIFY (a != d128); VERIFY (d128 != a); |
| } |
| |
| void |
| compare_lt_128 (void) |
| { |
| decimal128 a = -100; |
| |
| VERIFY (a < si); |
| VERIFY (a < ui); |
| VERIFY (a < sl); |
| VERIFY (a < ul); |
| VERIFY (a < sll); |
| VERIFY (a < ull); |
| VERIFY (a < d32); |
| VERIFY (a < d64); |
| VERIFY (a < d128); |
| |
| a = 100; |
| VERIFY (si < a); |
| VERIFY (ui < a); |
| VERIFY (sl < a); |
| VERIFY (ul < a); |
| VERIFY (sll < a); |
| VERIFY (ull < a); |
| VERIFY (d32 < a); |
| VERIFY (d64 < a); |
| VERIFY (d128 < a); |
| } |
| |
| void |
| compare_le_128 (void) |
| { |
| decimal128 a; |
| |
| a = si; VERIFY (a <= si); VERIFY (si <= a); |
| a = ui; VERIFY (a <= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a <= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a <= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a <= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a <= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a <= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a <= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a <= d128); VERIFY (d128 <= a); |
| |
| a = -100; |
| VERIFY (a <= si); |
| VERIFY (a <= ui); |
| VERIFY (a <= sl); |
| VERIFY (a <= ul); |
| VERIFY (a <= sll); |
| VERIFY (a <= ull); |
| VERIFY (a <= d32); |
| VERIFY (a <= d64); |
| VERIFY (a <= d128); |
| |
| a = 100; |
| VERIFY (si <= a); |
| VERIFY (ui <= a); |
| VERIFY (sl <= a); |
| VERIFY (ul <= a); |
| VERIFY (sll <= a); |
| VERIFY (ull <= a); |
| VERIFY (d32 <= a); |
| VERIFY (d64 <= a); |
| VERIFY (d128 <= a); |
| } |
| |
| void |
| compare_gt_128 (void) |
| { |
| decimal128 a = 100; |
| |
| VERIFY (a > si); |
| VERIFY (a > ui); |
| VERIFY (a > sl); |
| VERIFY (a > ul); |
| VERIFY (a > sll); |
| VERIFY (a > ull); |
| VERIFY (a > d32); |
| VERIFY (a > d64); |
| VERIFY (a > d128); |
| |
| a = -100; |
| VERIFY (si > a); |
| VERIFY (ui > a); |
| VERIFY (sl > a); |
| VERIFY (ul > a); |
| VERIFY (sll > a); |
| VERIFY (ull > a); |
| VERIFY (d32 > a); |
| VERIFY (d64 > a); |
| VERIFY (d128 > a); |
| } |
| |
| void |
| compare_ge_128 (void) |
| { |
| decimal128 a; |
| |
| a = si; VERIFY (a >= si); VERIFY (si <= a); |
| a = ui; VERIFY (a >= ui); VERIFY (ui <= a); |
| a = sl; VERIFY (a >= sl); VERIFY (sl <= a); |
| a = ul; VERIFY (a >= ul); VERIFY (ul <= a); |
| a = sll; VERIFY (a >= sll); VERIFY (sll <= a); |
| a = ull; VERIFY (a >= ull); VERIFY (ull <= a); |
| a = d32; VERIFY (a >= d32); VERIFY (d32 <= a); |
| a = (decimal32)d64; VERIFY (a >= d64); VERIFY (d64 <= a); |
| a = (decimal32)d128; VERIFY (a >= d128); VERIFY (d128 <= a); |
| |
| a = 100; |
| VERIFY (a >= si); |
| VERIFY (a >= ui); |
| VERIFY (a >= sl); |
| VERIFY (a >= ul); |
| VERIFY (a >= sll); |
| VERIFY (a >= ull); |
| VERIFY (a >= d32); |
| VERIFY (a >= d64); |
| VERIFY (a >= d128); |
| |
| a = -100; |
| VERIFY (si >= a); |
| VERIFY (ui >= a); |
| VERIFY (sl >= a); |
| VERIFY (ul >= a); |
| VERIFY (sll >= a); |
| VERIFY (ull >= a); |
| VERIFY (d32 >= a); |
| VERIFY (d64 >= a); |
| VERIFY (d128 >= a); |
| } |
| |
| int |
| main () |
| { |
| compare_eq_32 (); |
| compare_ne_32 (); |
| compare_lt_32 (); |
| compare_le_32 (); |
| compare_gt_32 (); |
| compare_ge_32 (); |
| |
| compare_eq_64 (); |
| compare_ne_64 (); |
| compare_lt_64 (); |
| compare_le_64 (); |
| compare_gt_64 (); |
| compare_ge_64 (); |
| |
| compare_eq_128 (); |
| compare_ne_128 (); |
| compare_lt_128 (); |
| compare_le_128 (); |
| compare_gt_128 (); |
| compare_ge_128 (); |
| } |