1 // Copyright (C) 2009-2019 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 25 using namespace std::decimal; 26 27 decimal32 d32 (5); 28 decimal64 d64 (-10); 29 decimal128 d128 (25); 30 int si = -20; 31 unsigned int ui = 50; 32 long sl = -10; 33 unsigned long ul = 20; 34 long long sll = -25; 35 unsigned long long ull = 50; 36 37 void compare_eq_32(void)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 53 void compare_ne_32(void)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 69 void compare_lt_32(void)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 96 void compare_le_32(void)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 134 void compare_gt_32(void)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 161 void compare_ge_32(void)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 199 void compare_eq_64(void)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 215 void compare_ne_64(void)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 231 void compare_lt_64(void)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 258 void compare_le_64(void)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 296 void compare_gt_64(void)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 323 void compare_ge_64(void)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 361 void compare_eq_128(void)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 377 void compare_ne_128(void)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 393 void compare_lt_128(void)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 420 void compare_le_128(void)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 458 void compare_gt_128(void)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 485 void compare_ge_128(void)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 523 int main()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