------------------------------------------------------------------------ -- compare0.decTest -- decimal comparison (simplified) -- -- Copyright (c) IBM Corporation, 1981, 2008. All rights reserved. -- ------------------------------------------------------------------------ -- Please see the document "General Decimal Arithmetic Testcases" -- -- at http://www2.hursley.ibm.com/decimal for the description of -- -- these testcases. -- -- -- -- These testcases are experimental ('beta' versions), and they -- -- may contain errors. They are offered on an as-is basis. In -- -- particular, achieving the same results as the tests here is not -- -- a guarantee that an implementation complies with any Standard -- -- or specification. The tests are not exhaustive. -- -- -- -- Please send comments, suggestions, and corrections to the author: -- -- Mike Cowlishaw, IBM Fellow -- -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ version: 2.58 -- Note that we cannot assume add/subtract tests cover paths adequately, -- here, because the code might be quite different (comparison cannot -- overflow or underflow, so actual subtractions are not necessary). extended: 0 precision: 9 rounding: half_up maxExponent: 999 minexponent: -999 com001 compare -2 -2 -> 0 com002 compare -2 -1 -> -1 com003 compare -2 0 -> -1 com004 compare -2 1 -> -1 com005 compare -2 2 -> -1 com006 compare -1 -2 -> 1 com007 compare -1 -1 -> 0 com008 compare -1 0 -> -1 com009 compare -1 1 -> -1 com010 compare -1 2 -> -1 com011 compare 0 -2 -> 1 com012 compare 0 -1 -> 1 com013 compare 0 0 -> 0 com014 compare 0 1 -> -1 com015 compare 0 2 -> -1 com016 compare 1 -2 -> 1 com017 compare 1 -1 -> 1 com018 compare 1 0 -> 1 com019 compare 1 1 -> 0 com020 compare 1 2 -> -1 com021 compare 2 -2 -> 1 com022 compare 2 -1 -> 1 com023 compare 2 0 -> 1 com025 compare 2 1 -> 1 com026 compare 2 2 -> 0 com031 compare -20 -20 -> 0 com032 compare -20 -10 -> -1 com033 compare -20 00 -> -1 com034 compare -20 10 -> -1 com035 compare -20 20 -> -1 com036 compare -10 -20 -> 1 com037 compare -10 -10 -> 0 com038 compare -10 00 -> -1 com039 compare -10 10 -> -1 com040 compare -10 20 -> -1 com041 compare 00 -20 -> 1 com042 compare 00 -10 -> 1 com043 compare 00 00 -> 0 com044 compare 00 10 -> -1 com045 compare 00 20 -> -1 com046 compare 10 -20 -> 1 com047 compare 10 -10 -> 1 com048 compare 10 00 -> 1 com049 compare 10 10 -> 0 com050 compare 10 20 -> -1 com051 compare 20 -20 -> 1 com052 compare 20 -10 -> 1 com053 compare 20 00 -> 1 com055 compare 20 10 -> 1 com056 compare 20 20 -> 0 com061 compare -2.0 -2.0 -> 0 com062 compare -2.0 -1.0 -> -1 com063 compare -2.0 0.0 -> -1 com064 compare -2.0 1.0 -> -1 com065 compare -2.0 2.0 -> -1 com066 compare -1.0 -2.0 -> 1 com067 compare -1.0 -1.0 -> 0 com068 compare -1.0 0.0 -> -1 com069 compare -1.0 1.0 -> -1 com070 compare -1.0 2.0 -> -1 com071 compare 0.0 -2.0 -> 1 com072 compare 0.0 -1.0 -> 1 com073 compare 0.0 0.0 -> 0 com074 compare 0.0 1.0 -> -1 com075 compare 0.0 2.0 -> -1 com076 compare 1.0 -2.0 -> 1 com077 compare 1.0 -1.0 -> 1 com078 compare 1.0 0.0 -> 1 com079 compare 1.0 1.0 -> 0 com080 compare 1.0 2.0 -> -1 com081 compare 2.0 -2.0 -> 1 com082 compare 2.0 -1.0 -> 1 com083 compare 2.0 0.0 -> 1 com085 compare 2.0 1.0 -> 1 com086 compare 2.0 2.0 -> 0 -- some differing length/exponent cases precision: 9 com100 compare 7.0 7.0 -> 0 com101 compare 7.0 7 -> 0 com102 compare 7 7.0 -> 0 com103 compare 7E+0 7.0 -> 0 com104 compare 70E-1 7.0 -> 0 com105 compare 0.7E+1 7 -> 0 com106 compare 70E-1 7 -> 0 com107 compare 7.0 7E+0 -> 0 com108 compare 7.0 70E-1 -> 0 com109 compare 7 0.7E+1 -> 0 com110 compare 7 70E-1 -> 0 com120 compare 8.0 7.0 -> 1 com121 compare 8.0 7 -> 1 com122 compare 8 7.0 -> 1 com123 compare 8E+0 7.0 -> 1 com124 compare 80E-1 7.0 -> 1 com125 compare 0.8E+1 7 -> 1 com126 compare 80E-1 7 -> 1 com127 compare 8.0 7E+0 -> 1 com128 compare 8.0 70E-1 -> 1 com129 compare 8 0.7E+1 -> 1 com130 compare 8 70E-1 -> 1 com140 compare 8.0 9.0 -> -1 com141 compare 8.0 9 -> -1 com142 compare 8 9.0 -> -1 com143 compare 8E+0 9.0 -> -1 com144 compare 80E-1 9.0 -> -1 com145 compare 0.8E+1 9 -> -1 com146 compare 80E-1 9 -> -1 com147 compare 8.0 9E+0 -> -1 com148 compare 8.0 90E-1 -> -1 com149 compare 8 0.9E+1 -> -1 com150 compare 8 90E-1 -> -1 -- and again, with sign changes -+ .. com200 compare -7.0 7.0 -> -1 com201 compare -7.0 7 -> -1 com202 compare -7 7.0 -> -1 com203 compare -7E+0 7.0 -> -1 com204 compare -70E-1 7.0 -> -1 com205 compare -0.7E+1 7 -> -1 com206 compare -70E-1 7 -> -1 com207 compare -7.0 7E+0 -> -1 com208 compare -7.0 70E-1 -> -1 com209 compare -7 0.7E+1 -> -1 com210 compare -7 70E-1 -> -1 com220 compare -8.0 7.0 -> -1 com221 compare -8.0 7 -> -1 com222 compare -8 7.0 -> -1 com223 compare -8E+0 7.0 -> -1 com224 compare -80E-1 7.0 -> -1 com225 compare -0.8E+1 7 -> -1 com226 compare -80E-1 7 -> -1 com227 compare -8.0 7E+0 -> -1 com228 compare -8.0 70E-1 -> -1 com229 compare -8 0.7E+1 -> -1 com230 compare -8 70E-1 -> -1 com240 compare -8.0 9.0 -> -1 com241 compare -8.0 9 -> -1 com242 compare -8 9.0 -> -1 com243 compare -8E+0 9.0 -> -1 com244 compare -80E-1 9.0 -> -1 com245 compare -0.8E+1 9 -> -1 com246 compare -80E-1 9 -> -1 com247 compare -8.0 9E+0 -> -1 com248 compare -8.0 90E-1 -> -1 com249 compare -8 0.9E+1 -> -1 com250 compare -8 90E-1 -> -1 -- and again, with sign changes +- .. com300 compare 7.0 -7.0 -> 1 com301 compare 7.0 -7 -> 1 com302 compare 7 -7.0 -> 1 com303 compare 7E+0 -7.0 -> 1 com304 compare 70E-1 -7.0 -> 1 com305 compare .7E+1 -7 -> 1 com306 compare 70E-1 -7 -> 1 com307 compare 7.0 -7E+0 -> 1 com308 compare 7.0 -70E-1 -> 1 com309 compare 7 -.7E+1 -> 1 com310 compare 7 -70E-1 -> 1 com320 compare 8.0 -7.0 -> 1 com321 compare 8.0 -7 -> 1 com322 compare 8 -7.0 -> 1 com323 compare 8E+0 -7.0 -> 1 com324 compare 80E-1 -7.0 -> 1 com325 compare .8E+1 -7 -> 1 com326 compare 80E-1 -7 -> 1 com327 compare 8.0 -7E+0 -> 1 com328 compare 8.0 -70E-1 -> 1 com329 compare 8 -.7E+1 -> 1 com330 compare 8 -70E-1 -> 1 com340 compare 8.0 -9.0 -> 1 com341 compare 8.0 -9 -> 1 com342 compare 8 -9.0 -> 1 com343 compare 8E+0 -9.0 -> 1 com344 compare 80E-1 -9.0 -> 1 com345 compare .8E+1 -9 -> 1 com346 compare 80E-1 -9 -> 1 com347 compare 8.0 -9E+0 -> 1 com348 compare 8.0 -90E-1 -> 1 com349 compare 8 -.9E+1 -> 1 com350 compare 8 -90E-1 -> 1 -- and again, with sign changes -- .. com400 compare -7.0 -7.0 -> 0 com401 compare -7.0 -7 -> 0 com402 compare -7 -7.0 -> 0 com403 compare -7E+0 -7.0 -> 0 com404 compare -70E-1 -7.0 -> 0 com405 compare -.7E+1 -7 -> 0 com406 compare -70E-1 -7 -> 0 com407 compare -7.0 -7E+0 -> 0 com408 compare -7.0 -70E-1 -> 0 com409 compare -7 -.7E+1 -> 0 com410 compare -7 -70E-1 -> 0 com420 compare -8.0 -7.0 -> -1 com421 compare -8.0 -7 -> -1 com422 compare -8 -7.0 -> -1 com423 compare -8E+0 -7.0 -> -1 com424 compare -80E-1 -7.0 -> -1 com425 compare -.8E+1 -7 -> -1 com426 compare -80E-1 -7 -> -1 com427 compare -8.0 -7E+0 -> -1 com428 compare -8.0 -70E-1 -> -1 com429 compare -8 -.7E+1 -> -1 com430 compare -8 -70E-1 -> -1 com440 compare -8.0 -9.0 -> 1 com441 compare -8.0 -9 -> 1 com442 compare -8 -9.0 -> 1 com443 compare -8E+0 -9.0 -> 1 com444 compare -80E-1 -9.0 -> 1 com445 compare -.8E+1 -9 -> 1 com446 compare -80E-1 -9 -> 1 com447 compare -8.0 -9E+0 -> 1 com448 compare -8.0 -90E-1 -> 1 com449 compare -8 -.9E+1 -> 1 com450 compare -8 -90E-1 -> 1 -- now some cases which might overflow if subtract were used maxexponent: 999999999 minexponent: -999999999 com460 compare 9.99999999E+999999999 9.99999999E+999999999 -> 0 com461 compare -9.99999999E+999999999 9.99999999E+999999999 -> -1 com462 compare 9.99999999E+999999999 -9.99999999E+999999999 -> 1 com463 compare -9.99999999E+999999999 -9.99999999E+999999999 -> 0 -- testcases that subtract to lots of zeros at boundaries [pgr] precision: 40 com470 compare 123.4560000000000000E789 123.456E789 -> 0 com471 compare 123.456000000000000E-89 123.456E-89 -> 0 com472 compare 123.45600000000000E789 123.456E789 -> 0 com473 compare 123.4560000000000E-89 123.456E-89 -> 0 com474 compare 123.456000000000E789 123.456E789 -> 0 com475 compare 123.45600000000E-89 123.456E-89 -> 0 com476 compare 123.4560000000E789 123.456E789 -> 0 com477 compare 123.456000000E-89 123.456E-89 -> 0 com478 compare 123.45600000E789 123.456E789 -> 0 com479 compare 123.4560000E-89 123.456E-89 -> 0 com480 compare 123.456000E789 123.456E789 -> 0 com481 compare 123.45600E-89 123.456E-89 -> 0 com482 compare 123.4560E789 123.456E789 -> 0 com483 compare 123.456E-89 123.456E-89 -> 0 com484 compare 123.456E-89 123.4560000000000000E-89 -> 0 com485 compare 123.456E789 123.456000000000000E789 -> 0 com486 compare 123.456E-89 123.45600000000000E-89 -> 0 com487 compare 123.456E789 123.4560000000000E789 -> 0 com488 compare 123.456E-89 123.456000000000E-89 -> 0 com489 compare 123.456E789 123.45600000000E789 -> 0 com490 compare 123.456E-89 123.4560000000E-89 -> 0 com491 compare 123.456E789 123.456000000E789 -> 0 com492 compare 123.456E-89 123.45600000E-89 -> 0 com493 compare 123.456E789 123.4560000E789 -> 0 com494 compare 123.456E-89 123.456000E-89 -> 0 com495 compare 123.456E789 123.45600E789 -> 0 com496 compare 123.456E-89 123.4560E-89 -> 0 com497 compare 123.456E789 123.456E789 -> 0 -- wide-ranging, around precision; signs equal precision: 9 com500 compare 1 1E-15 -> 1 com501 compare 1 1E-14 -> 1 com502 compare 1 1E-13 -> 1 com503 compare 1 1E-12 -> 1 com504 compare 1 1E-11 -> 1 com505 compare 1 1E-10 -> 1 com506 compare 1 1E-9 -> 1 com507 compare 1 1E-8 -> 1 com508 compare 1 1E-7 -> 1 com509 compare 1 1E-6 -> 1 com510 compare 1 1E-5 -> 1 com511 compare 1 1E-4 -> 1 com512 compare 1 1E-3 -> 1 com513 compare 1 1E-2 -> 1 com514 compare 1 1E-1 -> 1 com515 compare 1 1E-0 -> 0 com516 compare 1 1E+1 -> -1 com517 compare 1 1E+2 -> -1 com518 compare 1 1E+3 -> -1 com519 compare 1 1E+4 -> -1 com521 compare 1 1E+5 -> -1 com522 compare 1 1E+6 -> -1 com523 compare 1 1E+7 -> -1 com524 compare 1 1E+8 -> -1 com525 compare 1 1E+9 -> -1 com526 compare 1 1E+10 -> -1 com527 compare 1 1E+11 -> -1 com528 compare 1 1E+12 -> -1 com529 compare 1 1E+13 -> -1 com530 compare 1 1E+14 -> -1 com531 compare 1 1E+15 -> -1 -- LR swap com540 compare 1E-15 1 -> -1 com541 compare 1E-14 1 -> -1 com542 compare 1E-13 1 -> -1 com543 compare 1E-12 1 -> -1 com544 compare 1E-11 1 -> -1 com545 compare 1E-10 1 -> -1 com546 compare 1E-9 1 -> -1 com547 compare 1E-8 1 -> -1 com548 compare 1E-7 1 -> -1 com549 compare 1E-6 1 -> -1 com550 compare 1E-5 1 -> -1 com551 compare 1E-4 1 -> -1 com552 compare 1E-3 1 -> -1 com553 compare 1E-2 1 -> -1 com554 compare 1E-1 1 -> -1 com555 compare 1E-0 1 -> 0 com556 compare 1E+1 1 -> 1 com557 compare 1E+2 1 -> 1 com558 compare 1E+3 1 -> 1 com559 compare 1E+4 1 -> 1 com561 compare 1E+5 1 -> 1 com562 compare 1E+6 1 -> 1 com563 compare 1E+7 1 -> 1 com564 compare 1E+8 1 -> 1 com565 compare 1E+9 1 -> 1 com566 compare 1E+10 1 -> 1 com567 compare 1E+11 1 -> 1 com568 compare 1E+12 1 -> 1 com569 compare 1E+13 1 -> 1 com570 compare 1E+14 1 -> 1 com571 compare 1E+15 1 -> 1 -- similar with an useful coefficient, one side only com580 compare 0.000000987654321 1E-15 -> 1 com581 compare 0.000000987654321 1E-14 -> 1 com582 compare 0.000000987654321 1E-13 -> 1 com583 compare 0.000000987654321 1E-12 -> 1 com584 compare 0.000000987654321 1E-11 -> 1 com585 compare 0.000000987654321 1E-10 -> 1 com586 compare 0.000000987654321 1E-9 -> 1 com587 compare 0.000000987654321 1E-8 -> 1 com588 compare 0.000000987654321 1E-7 -> 1 com589 compare 0.000000987654321 1E-6 -> -1 com590 compare 0.000000987654321 1E-5 -> -1 com591 compare 0.000000987654321 1E-4 -> -1 com592 compare 0.000000987654321 1E-3 -> -1 com593 compare 0.000000987654321 1E-2 -> -1 com594 compare 0.000000987654321 1E-1 -> -1 com595 compare 0.000000987654321 1E-0 -> -1 com596 compare 0.000000987654321 1E+1 -> -1 com597 compare 0.000000987654321 1E+2 -> -1 com598 compare 0.000000987654321 1E+3 -> -1 com599 compare 0.000000987654321 1E+4 -> -1 -- check some unit-y traps precision: 20 com600 compare 12 12.2345 -> -1 com601 compare 12.0 12.2345 -> -1 com602 compare 12.00 12.2345 -> -1 com603 compare 12.000 12.2345 -> -1 com604 compare 12.0000 12.2345 -> -1 com605 compare 12.00000 12.2345 -> -1 com606 compare 12.000000 12.2345 -> -1 com607 compare 12.0000000 12.2345 -> -1 com608 compare 12.00000000 12.2345 -> -1 com609 compare 12.000000000 12.2345 -> -1 com610 compare 12.1234 12 -> 1 com611 compare 12.1234 12.0 -> 1 com612 compare 12.1234 12.00 -> 1 com613 compare 12.1234 12.000 -> 1 com614 compare 12.1234 12.0000 -> 1 com615 compare 12.1234 12.00000 -> 1 com616 compare 12.1234 12.000000 -> 1 com617 compare 12.1234 12.0000000 -> 1 com618 compare 12.1234 12.00000000 -> 1 com619 compare 12.1234 12.000000000 -> 1 com620 compare -12 -12.2345 -> 1 com621 compare -12.0 -12.2345 -> 1 com622 compare -12.00 -12.2345 -> 1 com623 compare -12.000 -12.2345 -> 1 com624 compare -12.0000 -12.2345 -> 1 com625 compare -12.00000 -12.2345 -> 1 com626 compare -12.000000 -12.2345 -> 1 com627 compare -12.0000000 -12.2345 -> 1 com628 compare -12.00000000 -12.2345 -> 1 com629 compare -12.000000000 -12.2345 -> 1 com630 compare -12.1234 -12 -> -1 com631 compare -12.1234 -12.0 -> -1 com632 compare -12.1234 -12.00 -> -1 com633 compare -12.1234 -12.000 -> -1 com634 compare -12.1234 -12.0000 -> -1 com635 compare -12.1234 -12.00000 -> -1 com636 compare -12.1234 -12.000000 -> -1 com637 compare -12.1234 -12.0000000 -> -1 com638 compare -12.1234 -12.00000000 -> -1 com639 compare -12.1234 -12.000000000 -> -1 -- trailing zeros; unit-y precision: 20 com680 compare 12 12 -> 0 com681 compare 12 12.0 -> 0 com682 compare 12 12.00 -> 0 com683 compare 12 12.000 -> 0 com684 compare 12 12.0000 -> 0 com685 compare 12 12.00000 -> 0 com686 compare 12 12.000000 -> 0 com687 compare 12 12.0000000 -> 0 com688 compare 12 12.00000000 -> 0 com689 compare 12 12.000000000 -> 0 com690 compare 12 12 -> 0 com691 compare 12.0 12 -> 0 com692 compare 12.00 12 -> 0 com693 compare 12.000 12 -> 0 com694 compare 12.0000 12 -> 0 com695 compare 12.00000 12 -> 0 com696 compare 12.000000 12 -> 0 com697 compare 12.0000000 12 -> 0 com698 compare 12.00000000 12 -> 0 com699 compare 12.000000000 12 -> 0 -- lostDigits checks maxexponent: 999 minexponent: -999 precision: 9 com701 compare 12345678000 1 -> 1 Rounded com702 compare 1 12345678000 -> -1 Rounded com703 compare 1234567800 1 -> 1 Rounded com704 compare 1 1234567800 -> -1 Rounded com705 compare 1234567890 1 -> 1 Rounded com706 compare 1 1234567890 -> -1 Rounded com707 compare 1234567891 1 -> 1 Inexact Lost_digits Rounded com708 compare 1 1234567891 -> -1 Inexact Lost_digits Rounded com709 compare 12345678901 1 -> 1 Inexact Lost_digits Rounded com710 compare 1 12345678901 -> -1 Inexact Lost_digits Rounded com711 compare 1234567896 1 -> 1 Inexact Lost_digits Rounded com712 compare 1 1234567896 -> -1 Inexact Lost_digits Rounded com713 compare -1234567891 1 -> -1 Inexact Lost_digits Rounded com714 compare 1 -1234567891 -> 1 Inexact Lost_digits Rounded com715 compare -12345678901 1 -> -1 Inexact Lost_digits Rounded com716 compare 1 -12345678901 -> 1 Inexact Lost_digits Rounded com717 compare -1234567896 1 -> -1 Inexact Lost_digits Rounded com718 compare 1 -1234567896 -> 1 Inexact Lost_digits Rounded precision: 15 -- still checking for [no] lostDigits com741 compare 12345678000 1 -> 1 com742 compare 1 12345678000 -> -1 com743 compare 1234567800 1 -> 1 com744 compare 1 1234567800 -> -1 com745 compare 1234567890 1 -> 1 com746 compare 1 1234567890 -> -1 com747 compare 1234567891 1 -> 1 com748 compare 1 1234567891 -> -1 com749 compare 12345678901 1 -> 1 com750 compare 1 12345678901 -> -1 com751 compare 1234567896 1 -> 1 com752 compare 1 1234567896 -> -1 -- Null tests com900 compare 10 # -> ? Invalid_operation com901 compare # 10 -> ? Invalid_operation