cpython/Lib/test/decimaltestdata/decimal64.decTest

445 lines
22 KiB
Plaintext
Raw Normal View History

------------------------------------------------------------------------
-- decimal64.decTest -- decimal eight-byte format testcases --
-- Copyright (c) IBM Corporation, 2000, 2003. 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.39
-- This set of tests is for the eight-byte concrete representation.
-- Its characteristics are:
--
-- 1 bit sign
-- 5 bits combination field
-- 8 bits exponent continuation
-- 50 bits coefficient continuation
--
-- Total exponent length 10 bits
-- Total coefficient length 54 bits (16 digits)
--
-- Elimit = 767 (maximum encoded exponent)
-- Emax = 384 (largest exponent value)
-- Emin = -383 (smallest exponent value)
-- bias = 398 (subtracted from encoded exponent) = -Etiny
extended: 1
precision: 16
rounding: half_up
maxExponent: 384
minExponent: -383
-- General testcases
-- (mostly derived from the Strawman 4 document and examples)
dece001 apply #A2300000000003D0 -> -7.50
dece002 apply -7.50 -> #A2300000000003D0
-- Normality
dece010 apply 1234567890123456 -> #263934b9c1e28e56
dece011 apply 1234567890123456.0 -> #263934b9c1e28e56 Rounded
dece012 apply 1234567890123456.1 -> #263934b9c1e28e56 Rounded Inexact
dece013 apply -1234567890123456 -> #a63934b9c1e28e56
dece014 apply -1234567890123456.0 -> #a63934b9c1e28e56 Rounded
dece015 apply -1234567890123456.1 -> #a63934b9c1e28e56 Rounded Inexact
-- Nmax and similar
dece022 apply 9.999999999999999E+384 -> #77fcff3fcff3fcff
dece023 apply #77fcff3fcff3fcff -> 9.999999999999999E+384
dece024 apply 1.234567890123456E+384 -> #47fd34b9c1e28e56
dece025 apply #47fd34b9c1e28e56 -> 1.234567890123456E+384
-- fold-downs (more below)
dece030 apply 1.23E+384 -> #47fd300000000000 Clamped
dece031 apply #47fd300000000000 -> 1.230000000000000E+384
dece032 apply 1E+384 -> #47fc000000000000 Clamped
dece033 apply #47fc000000000000 -> 1.000000000000000E+384
-- overflows
maxExponent: 999 -- set high so conversion causes the overflow
minExponent: -999
dece040 apply 10E+384 -> #7800000000000000 Overflow Rounded Inexact
dece041 apply 1.000000000000000E+385 -> #7800000000000000 Overflow Rounded Inexact
maxExponent: 384
minExponent: -383
dece051 apply 12345 -> #22380000000049c5
dece052 apply #22380000000049c5 -> 12345
dece053 apply 1234 -> #2238000000000534
dece054 apply #2238000000000534 -> 1234
dece055 apply 123 -> #22380000000000a3
dece056 apply #22380000000000a3 -> 123
dece057 apply 12 -> #2238000000000012
dece058 apply #2238000000000012 -> 12
dece059 apply 1 -> #2238000000000001
dece060 apply #2238000000000001 -> 1
dece061 apply 1.23 -> #22300000000000a3
dece062 apply #22300000000000a3 -> 1.23
dece063 apply 123.45 -> #22300000000049c5
dece064 apply #22300000000049c5 -> 123.45
-- Nmin and below
dece071 apply 1E-383 -> #003c000000000001
dece072 apply #003c000000000001 -> 1E-383
dece073 apply 1.000000000000000E-383 -> #0400000000000000
dece074 apply #0400000000000000 -> 1.000000000000000E-383
dece075 apply 1.000000000000001E-383 -> #0400000000000001
dece076 apply #0400000000000001 -> 1.000000000000001E-383
dece077 apply 0.100000000000000E-383 -> #0000800000000000 Subnormal
dece078 apply #0000800000000000 -> 1.00000000000000E-384 Subnormal
dece079 apply 0.000000000000010E-383 -> #0000000000000010 Subnormal
dece080 apply #0000000000000010 -> 1.0E-397 Subnormal
dece081 apply 0.00000000000001E-383 -> #0004000000000001 Subnormal
dece082 apply #0004000000000001 -> 1E-397 Subnormal
dece083 apply 0.000000000000001E-383 -> #0000000000000001 Subnormal
dece084 apply #0000000000000001 -> 1E-398 Subnormal
-- underflows
dece090 apply 1e-398 -> #0000000000000001 Subnormal
dece091 apply 1.9e-398 -> #0000000000000002 Subnormal Underflow Inexact Rounded
dece092 apply 1.1e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
dece093 apply 1.00000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
dece094 apply 1.00000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
dece095 apply 1.000000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded
dece096 apply 0.1e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
dece097 apply 0.00000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
dece098 apply 0.00000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
dece099 apply 0.000000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded
-- Same again, negatives
-- Nmax and similar
dece122 apply -9.999999999999999E+384 -> #f7fcff3fcff3fcff
dece123 apply #f7fcff3fcff3fcff -> -9.999999999999999E+384
dece124 apply -1.234567890123456E+384 -> #c7fd34b9c1e28e56
dece125 apply #c7fd34b9c1e28e56 -> -1.234567890123456E+384
-- fold-downs (more below)
dece130 apply -1.23E+384 -> #c7fd300000000000 Clamped
dece131 apply #c7fd300000000000 -> -1.230000000000000E+384
dece132 apply -1E+384 -> #c7fc000000000000 Clamped
dece133 apply #c7fc000000000000 -> -1.000000000000000E+384
-- overflows
maxExponent: 999 -- set high so conversion causes the overflow
minExponent: -999
dece140 apply -10E+384 -> #f800000000000000 Overflow Rounded Inexact
dece141 apply -1.000000000000000E+385 -> #f800000000000000 Overflow Rounded Inexact
maxExponent: 384
minExponent: -383
dece151 apply -12345 -> #a2380000000049c5
dece152 apply #a2380000000049c5 -> -12345
dece153 apply -1234 -> #a238000000000534
dece154 apply #a238000000000534 -> -1234
dece155 apply -123 -> #a2380000000000a3
dece156 apply #a2380000000000a3 -> -123
dece157 apply -12 -> #a238000000000012
dece158 apply #a238000000000012 -> -12
dece159 apply -1 -> #a238000000000001
dece160 apply #a238000000000001 -> -1
dece161 apply -1.23 -> #a2300000000000a3
dece162 apply #a2300000000000a3 -> -1.23
dece163 apply -123.45 -> #a2300000000049c5
dece164 apply #a2300000000049c5 -> -123.45
-- Nmin and below
dece171 apply -1E-383 -> #803c000000000001
dece172 apply #803c000000000001 -> -1E-383
dece173 apply -1.000000000000000E-383 -> #8400000000000000
dece174 apply #8400000000000000 -> -1.000000000000000E-383
dece175 apply -1.000000000000001E-383 -> #8400000000000001
dece176 apply #8400000000000001 -> -1.000000000000001E-383
dece177 apply -0.100000000000000E-383 -> #8000800000000000 Subnormal
dece178 apply #8000800000000000 -> -1.00000000000000E-384 Subnormal
dece179 apply -0.000000000000010E-383 -> #8000000000000010 Subnormal
dece180 apply #8000000000000010 -> -1.0E-397 Subnormal
dece181 apply -0.00000000000001E-383 -> #8004000000000001 Subnormal
dece182 apply #8004000000000001 -> -1E-397 Subnormal
dece183 apply -0.000000000000001E-383 -> #8000000000000001 Subnormal
dece184 apply #8000000000000001 -> -1E-398 Subnormal
-- underflows
dece189 apply -1e-398 -> #8000000000000001 Subnormal
dece190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded
dece191 apply -1.9e-398 -> #8000000000000002 Subnormal Underflow Inexact Rounded
dece192 apply -1.1e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
dece193 apply -1.00000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
dece194 apply -1.00000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
dece195 apply -1.000000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded
dece196 apply -0.1e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
dece197 apply -0.00000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
dece198 apply -0.00000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
dece199 apply -0.000000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded
-- zeros
dece401 apply 0E-500 -> #0000000000000000 Clamped
dece402 apply 0E-400 -> #0000000000000000 Clamped
dece403 apply 0E-398 -> #0000000000000000
dece404 apply #0000000000000000 -> 0E-398
dece405 apply 0.000000000000000E-383 -> #0000000000000000
dece406 apply #0000000000000000 -> 0E-398
dece407 apply 0E-2 -> #2230000000000000
dece408 apply #2230000000000000 -> 0.00
dece409 apply 0 -> #2238000000000000
dece410 apply #2238000000000000 -> 0
dece411 apply 0E+3 -> #2244000000000000
dece412 apply #2244000000000000 -> 0E+3
dece413 apply 0E+369 -> #43fc000000000000
dece414 apply #43fc000000000000 -> 0E+369
-- clamped zeros...
dece415 apply 0E+370 -> #43fc000000000000 Clamped
dece416 apply #43fc000000000000 -> 0E+369
dece417 apply 0E+384 -> #43fc000000000000 Clamped
dece418 apply #43fc000000000000 -> 0E+369
dece419 apply 0E+400 -> #43fc000000000000 Clamped
dece420 apply #43fc000000000000 -> 0E+369
dece421 apply 0E+500 -> #43fc000000000000 Clamped
dece422 apply #43fc000000000000 -> 0E+369
-- negative zeros
dece431 apply -0E-400 -> #8000000000000000 Clamped
dece432 apply -0E-400 -> #8000000000000000 Clamped
dece433 apply -0E-398 -> #8000000000000000
dece434 apply #8000000000000000 -> -0E-398
dece435 apply -0.000000000000000E-383 -> #8000000000000000
dece436 apply #8000000000000000 -> -0E-398
dece437 apply -0E-2 -> #a230000000000000
dece438 apply #a230000000000000 -> -0.00
dece439 apply -0 -> #a238000000000000
dece440 apply #a238000000000000 -> -0
dece441 apply -0E+3 -> #a244000000000000
dece442 apply #a244000000000000 -> -0E+3
dece443 apply -0E+369 -> #c3fc000000000000
dece444 apply #c3fc000000000000 -> -0E+369
-- clamped zeros...
dece445 apply -0E+370 -> #c3fc000000000000 Clamped
dece446 apply #c3fc000000000000 -> -0E+369
dece447 apply -0E+384 -> #c3fc000000000000 Clamped
dece448 apply #c3fc000000000000 -> -0E+369
dece449 apply -0E+400 -> #c3fc000000000000 Clamped
dece450 apply #c3fc000000000000 -> -0E+369
dece451 apply -0E+500 -> #c3fc000000000000 Clamped
dece452 apply #c3fc000000000000 -> -0E+369
-- Specials
dece500 apply Infinity -> #7800000000000000
dece501 apply #7878787878787878 -> #7800000000000000
dece502 apply #7800000000000000 -> Infinity
dece503 apply #7979797979797979 -> #7800000000000000
dece504 apply #7900000000000000 -> Infinity
dece505 apply #7a7a7a7a7a7a7a7a -> #7800000000000000
dece506 apply #7a00000000000000 -> Infinity
dece507 apply #7b7b7b7b7b7b7b7b -> #7800000000000000
dece508 apply #7b00000000000000 -> Infinity
dece509 apply NaN -> #7c00000000000000
dece510 apply #7c7c7c7c7c7c7c7c -> #7c007c7c7c7c7c7c
dece511 apply #7c00000000000000 -> NaN
dece512 apply #7d7d7d7d7d7d7d7d -> #7c017d7d7d7d7d7d
dece513 apply #7d00000000000000 -> NaN
dece514 apply #7e7e7e7e7e7e7e7e -> #7e007e7e7e7e7c7e
dece515 apply #7e00000000000000 -> sNaN
dece516 apply #7f7f7f7f7f7f7f7f -> #7e007f7f7f7f7c7f
dece517 apply #7f00000000000000 -> sNaN
dece518 apply #7fffffffffffffff -> sNaN999999999999999
dece519 apply #7fffffffffffffff -> #7e00ff3fcff3fcff
dece520 apply -Infinity -> #f800000000000000
dece521 apply #f878787878787878 -> #f800000000000000
dece522 apply #f800000000000000 -> -Infinity
dece523 apply #f979797979797979 -> #f800000000000000
dece524 apply #f900000000000000 -> -Infinity
dece525 apply #fa7a7a7a7a7a7a7a -> #f800000000000000
dece526 apply #fa00000000000000 -> -Infinity
dece527 apply #fb7b7b7b7b7b7b7b -> #f800000000000000
dece528 apply #fb00000000000000 -> -Infinity
dece529 apply -NaN -> #fc00000000000000
dece530 apply #fc7c7c7c7c7c7c7c -> #fc007c7c7c7c7c7c
dece531 apply #fc00000000000000 -> -NaN
dece532 apply #fd7d7d7d7d7d7d7d -> #fc017d7d7d7d7d7d
dece533 apply #fd00000000000000 -> -NaN
dece534 apply #fe7e7e7e7e7e7e7e -> #fe007e7e7e7e7c7e
dece535 apply #fe00000000000000 -> -sNaN
dece536 apply #ff7f7f7f7f7f7f7f -> #fe007f7f7f7f7c7f
dece537 apply #ff00000000000000 -> -sNaN
dece538 apply #ffffffffffffffff -> -sNaN999999999999999
dece539 apply #ffffffffffffffff -> #fe00ff3fcff3fcff
-- diagnostic NaNs
dece540 apply NaN -> #7c00000000000000
dece541 apply NaN0 -> #7c00000000000000
dece542 apply NaN1 -> #7c00000000000001
dece543 apply NaN12 -> #7c00000000000012
dece544 apply NaN79 -> #7c00000000000079
dece545 apply NaN12345 -> #7c000000000049c5
dece546 apply NaN123456 -> #7c00000000028e56
dece547 apply NaN799799 -> #7c000000000f7fdf
dece548 apply NaN799799799799799 -> #7c03dff7fdff7fdf
dece549 apply NaN999999999999999 -> #7c00ff3fcff3fcff
dece550 apply NaN1234567890123456 -> #7c00000000000000 -- too many digits
-- fold-down full sequence
dece601 apply 1E+384 -> #47fc000000000000 Clamped
dece602 apply #47fc000000000000 -> 1.000000000000000E+384
dece603 apply 1E+383 -> #43fc800000000000 Clamped
dece604 apply #43fc800000000000 -> 1.00000000000000E+383
dece605 apply 1E+382 -> #43fc100000000000 Clamped
dece606 apply #43fc100000000000 -> 1.0000000000000E+382
dece607 apply 1E+381 -> #43fc010000000000 Clamped
dece608 apply #43fc010000000000 -> 1.000000000000E+381
dece609 apply 1E+380 -> #43fc002000000000 Clamped
dece610 apply #43fc002000000000 -> 1.00000000000E+380
dece611 apply 1E+379 -> #43fc000400000000 Clamped
dece612 apply #43fc000400000000 -> 1.0000000000E+379
dece613 apply 1E+378 -> #43fc000040000000 Clamped
dece614 apply #43fc000040000000 -> 1.000000000E+378
dece615 apply 1E+377 -> #43fc000008000000 Clamped
dece616 apply #43fc000008000000 -> 1.00000000E+377
dece617 apply 1E+376 -> #43fc000001000000 Clamped
dece618 apply #43fc000001000000 -> 1.0000000E+376
dece619 apply 1E+375 -> #43fc000000100000 Clamped
dece620 apply #43fc000000100000 -> 1.000000E+375
dece621 apply 1E+374 -> #43fc000000020000 Clamped
dece622 apply #43fc000000020000 -> 1.00000E+374
dece623 apply 1E+373 -> #43fc000000004000 Clamped
dece624 apply #43fc000000004000 -> 1.0000E+373
dece625 apply 1E+372 -> #43fc000000000400 Clamped
dece626 apply #43fc000000000400 -> 1.000E+372
dece627 apply 1E+371 -> #43fc000000000080 Clamped
dece628 apply #43fc000000000080 -> 1.00E+371
dece629 apply 1E+370 -> #43fc000000000010 Clamped
dece630 apply #43fc000000000010 -> 1.0E+370
dece631 apply 1E+369 -> #43fc000000000001
dece632 apply #43fc000000000001 -> 1E+369
dece633 apply 1E+368 -> #43f8000000000001
dece634 apply #43f8000000000001 -> 1E+368
-- same with 9s
dece641 apply 9E+384 -> #77fc000000000000 Clamped
dece642 apply #77fc000000000000 -> 9.000000000000000E+384
dece643 apply 9E+383 -> #43fc8c0000000000 Clamped
dece644 apply #43fc8c0000000000 -> 9.00000000000000E+383
dece645 apply 9E+382 -> #43fc1a0000000000 Clamped
dece646 apply #43fc1a0000000000 -> 9.0000000000000E+382
dece647 apply 9E+381 -> #43fc090000000000 Clamped
dece648 apply #43fc090000000000 -> 9.000000000000E+381
dece649 apply 9E+380 -> #43fc002300000000 Clamped
dece650 apply #43fc002300000000 -> 9.00000000000E+380
dece651 apply 9E+379 -> #43fc000680000000 Clamped
dece652 apply #43fc000680000000 -> 9.0000000000E+379
dece653 apply 9E+378 -> #43fc000240000000 Clamped
dece654 apply #43fc000240000000 -> 9.000000000E+378
dece655 apply 9E+377 -> #43fc000008c00000 Clamped
dece656 apply #43fc000008c00000 -> 9.00000000E+377
dece657 apply 9E+376 -> #43fc000001a00000 Clamped
dece658 apply #43fc000001a00000 -> 9.0000000E+376
dece659 apply 9E+375 -> #43fc000000900000 Clamped
dece660 apply #43fc000000900000 -> 9.000000E+375
dece661 apply 9E+374 -> #43fc000000023000 Clamped
dece662 apply #43fc000000023000 -> 9.00000E+374
dece663 apply 9E+373 -> #43fc000000006800 Clamped
dece664 apply #43fc000000006800 -> 9.0000E+373
dece665 apply 9E+372 -> #43fc000000002400 Clamped
dece666 apply #43fc000000002400 -> 9.000E+372
dece667 apply 9E+371 -> #43fc00000000008c Clamped
dece668 apply #43fc00000000008c -> 9.00E+371
dece669 apply 9E+370 -> #43fc00000000001a Clamped
dece670 apply #43fc00000000001a -> 9.0E+370
dece671 apply 9E+369 -> #43fc000000000009
dece672 apply #43fc000000000009 -> 9E+369
dece673 apply 9E+368 -> #43f8000000000009
dece674 apply #43f8000000000009 -> 9E+368
-- Selected DPD codes
dece700 apply #2238000000000000 -> 0
dece701 apply #2238000000000009 -> 9
dece702 apply #2238000000000010 -> 10
dece703 apply #2238000000000019 -> 19
dece704 apply #2238000000000020 -> 20
dece705 apply #2238000000000029 -> 29
dece706 apply #2238000000000030 -> 30
dece707 apply #2238000000000039 -> 39
dece708 apply #2238000000000040 -> 40
dece709 apply #2238000000000049 -> 49
dece710 apply #2238000000000050 -> 50
dece711 apply #2238000000000059 -> 59
dece712 apply #2238000000000060 -> 60
dece713 apply #2238000000000069 -> 69
dece714 apply #2238000000000070 -> 70
dece715 apply #2238000000000071 -> 71
dece716 apply #2238000000000072 -> 72
dece717 apply #2238000000000073 -> 73
dece718 apply #2238000000000074 -> 74
dece719 apply #2238000000000075 -> 75
dece720 apply #2238000000000076 -> 76
dece721 apply #2238000000000077 -> 77
dece722 apply #2238000000000078 -> 78
dece723 apply #2238000000000079 -> 79
dece730 apply #223800000000029e -> 994
dece731 apply #223800000000029f -> 995
dece732 apply #22380000000002a0 -> 520
dece733 apply #22380000000002a1 -> 521
-- DPD: one of each of the huffman groups
dece740 apply #22380000000003f7 -> 777
dece741 apply #22380000000003f8 -> 778
dece742 apply #22380000000003eb -> 787
dece743 apply #223800000000037d -> 877
dece744 apply #223800000000039f -> 997
dece745 apply #22380000000003bf -> 979
dece746 apply #22380000000003df -> 799
dece747 apply #223800000000006e -> 888
-- DPD all-highs cases (includes the 24 redundant codes)
dece750 apply #223800000000006e -> 888
dece751 apply #223800000000016e -> 888
dece752 apply #223800000000026e -> 888
dece753 apply #223800000000036e -> 888
dece754 apply #223800000000006f -> 889
dece755 apply #223800000000016f -> 889
dece756 apply #223800000000026f -> 889
dece757 apply #223800000000036f -> 889
dece760 apply #223800000000007e -> 898
dece761 apply #223800000000017e -> 898
dece762 apply #223800000000027e -> 898
dece763 apply #223800000000037e -> 898
dece764 apply #223800000000007f -> 899
dece765 apply #223800000000017f -> 899
dece766 apply #223800000000027f -> 899
dece767 apply #223800000000037f -> 899
dece770 apply #22380000000000ee -> 988
dece771 apply #22380000000001ee -> 988
dece772 apply #22380000000002ee -> 988
dece773 apply #22380000000003ee -> 988
dece774 apply #22380000000000ef -> 989
dece775 apply #22380000000001ef -> 989
dece776 apply #22380000000002ef -> 989
dece777 apply #22380000000003ef -> 989
dece780 apply #22380000000000fe -> 998
dece781 apply #22380000000001fe -> 998
dece782 apply #22380000000002fe -> 998
dece783 apply #22380000000003fe -> 998
dece784 apply #22380000000000ff -> 999
dece785 apply #22380000000001ff -> 999
dece786 apply #22380000000002ff -> 999
dece787 apply #22380000000003ff -> 999