Merged the decimal-branch (revisions 54886 to 58140). Decimal is now
fully updated to the latests Decimal Specification (v1.66) and the
latests test cases (v2.56).

Thanks to Mark Dickinson for all his help during this process.
diff --git a/Lib/test/decimaltestdata/dsEncode.decTest b/Lib/test/decimaltestdata/dsEncode.decTest
new file mode 100644
index 0000000..185ddc7
--- /dev/null
+++ b/Lib/test/decimaltestdata/dsEncode.decTest
@@ -0,0 +1,369 @@
+------------------------------------------------------------------------

+-- dsEncode.decTest -- decimal four-byte format testcases             --

+-- Copyright (c) IBM Corporation, 2000, 2007.  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                                                   --

+------------------------------------------------------------------------

+-- [Previously called decimal32.decTest]

+version: 2.56

+

+-- This set of tests is for the four-byte concrete representation.

+-- Its characteristics are:

+--

+--  1 bit  sign

+--  5 bits combination field

+--  6 bits exponent continuation

+-- 20 bits coefficient continuation

+--

+-- Total exponent length 8 bits

+-- Total coefficient length 24 bits (7 digits)

+--

+-- Elimit =  191 (maximum encoded exponent)

+-- Emax   =   96 (largest exponent value)

+-- Emin   =  -95 (smallest exponent value)

+-- bias   =  101 (subtracted from encoded exponent) = -Etiny

+

+-- The testcases here have only exactly representable data on the

+-- 'left-hand-side'; rounding from strings is tested in 'base'

+-- testcase groups.

+

+extended:    1

+clamp:       1

+precision:   7

+rounding:    half_up

+maxExponent: 96

+minExponent: -95

+

+-- General testcases

+-- (mostly derived from the Strawman 4 document and examples)

+decs001 apply   #A23003D0          -> -7.50

+decs002 apply   -7.50              -> #A23003D0

+-- derivative canonical plain strings

+decs003 apply   #A26003D0         -> -7.50E+3

+decs004 apply   -7.50E+3          -> #A26003D0

+decs005 apply   #A25003D0         -> -750

+decs006 apply   -750              -> #A25003D0

+decs007 apply   #A24003D0         -> -75.0

+decs008 apply   -75.0             -> #A24003D0

+decs009 apply   #A22003D0         -> -0.750

+decs010 apply   -0.750            -> #A22003D0

+decs011 apply   #A21003D0         -> -0.0750

+decs012 apply   -0.0750           -> #A21003D0

+decs013 apply   #A1f003D0         -> -0.000750

+decs014 apply   -0.000750         -> #A1f003D0

+decs015 apply   #A1d003D0         -> -0.00000750

+decs016 apply   -0.00000750       -> #A1d003D0

+decs017 apply   #A1c003D0         -> -7.50E-7

+decs018 apply   -7.50E-7          -> #A1c003D0

+

+-- Normality

+decs020 apply   1234567            -> #2654d2e7

+decs021 apply  -1234567            -> #a654d2e7

+decs022 apply   1111111            -> #26524491

+

+-- Nmax and similar

+decs031 apply   9.999999E+96            -> #77f3fcff

+decs032 apply   #77f3fcff               -> 9.999999E+96

+decs033 apply   1.234567E+96            -> #47f4d2e7

+decs034 apply   #47f4d2e7               -> 1.234567E+96

+-- fold-downs (more below)

+decs035 apply   1.23E+96                -> #47f4c000 Clamped

+decs036 apply   #47f4c000               -> 1.230000E+96

+decs037 apply   1E+96                   -> #47f00000 Clamped

+decs038 apply   #47f00000               -> 1.000000E+96

+

+decs051 apply   12345                   -> #225049c5

+decs052 apply   #225049c5               -> 12345

+decs053 apply   1234                    -> #22500534

+decs054 apply   #22500534               -> 1234

+decs055 apply   123                     -> #225000a3

+decs056 apply   #225000a3               -> 123

+decs057 apply   12                      -> #22500012

+decs058 apply   #22500012               -> 12

+decs059 apply   1                       -> #22500001

+decs060 apply   #22500001               -> 1

+decs061 apply   1.23                    -> #223000a3

+decs062 apply   #223000a3               -> 1.23

+decs063 apply   123.45                  -> #223049c5

+decs064 apply   #223049c5               -> 123.45

+

+-- Nmin and below

+decs071 apply   1E-95                   -> #00600001

+decs072 apply   #00600001               -> 1E-95

+decs073 apply   1.000000E-95            -> #04000000

+decs074 apply   #04000000               -> 1.000000E-95

+decs075 apply   1.000001E-95            -> #04000001

+decs076 apply   #04000001               -> 1.000001E-95

+

+decs077 apply   0.100000E-95            -> #00020000     Subnormal

+decs07x apply   1.00000E-96             -> 1.00000E-96   Subnormal

+decs078 apply   #00020000               -> 1.00000E-96   Subnormal

+decs079 apply   0.000010E-95            -> #00000010     Subnormal

+decs080 apply   #00000010               -> 1.0E-100      Subnormal

+decs081 apply   0.000001E-95            -> #00000001     Subnormal

+decs082 apply   #00000001               -> 1E-101        Subnormal

+decs083 apply   1e-101                  -> #00000001     Subnormal

+decs084 apply   #00000001               -> 1E-101        Subnormal

+decs08x apply   1e-101                  -> 1E-101        Subnormal

+

+-- underflows cannot be tested; just check edge case

+decs090 apply   1e-101                  -> #00000001  Subnormal

+

+-- same again, negatives --

+

+-- Nmax and similar

+decs122 apply  -9.999999E+96            -> #f7f3fcff

+decs123 apply   #f7f3fcff               -> -9.999999E+96

+decs124 apply  -1.234567E+96            -> #c7f4d2e7

+decs125 apply   #c7f4d2e7               -> -1.234567E+96

+-- fold-downs (more below)

+decs130 apply  -1.23E+96                -> #c7f4c000 Clamped

+decs131 apply   #c7f4c000               -> -1.230000E+96

+decs132 apply  -1E+96                   -> #c7f00000 Clamped

+decs133 apply   #c7f00000               -> -1.000000E+96

+

+decs151 apply  -12345                   -> #a25049c5

+decs152 apply   #a25049c5               -> -12345

+decs153 apply  -1234                    -> #a2500534

+decs154 apply   #a2500534               -> -1234

+decs155 apply  -123                     -> #a25000a3

+decs156 apply   #a25000a3               -> -123

+decs157 apply  -12                      -> #a2500012

+decs158 apply   #a2500012               -> -12

+decs159 apply  -1                       -> #a2500001

+decs160 apply   #a2500001               -> -1

+decs161 apply  -1.23                    -> #a23000a3

+decs162 apply   #a23000a3               -> -1.23

+decs163 apply  -123.45                  -> #a23049c5

+decs164 apply   #a23049c5               -> -123.45

+

+-- Nmin and below

+decs171 apply  -1E-95                   -> #80600001

+decs172 apply   #80600001               -> -1E-95

+decs173 apply  -1.000000E-95            -> #84000000

+decs174 apply   #84000000               -> -1.000000E-95

+decs175 apply  -1.000001E-95            -> #84000001

+decs176 apply   #84000001               -> -1.000001E-95

+

+decs177 apply  -0.100000E-95            -> #80020000     Subnormal

+decs178 apply   #80020000               -> -1.00000E-96  Subnormal

+decs179 apply  -0.000010E-95            -> #80000010     Subnormal

+decs180 apply   #80000010               -> -1.0E-100     Subnormal

+decs181 apply  -0.000001E-95            -> #80000001     Subnormal

+decs182 apply   #80000001               -> -1E-101       Subnormal

+decs183 apply  -1e-101                  -> #80000001     Subnormal

+decs184 apply   #80000001               -> -1E-101       Subnormal

+

+-- underflow edge case

+decs190 apply  -1e-101                  -> #80000001  Subnormal

+

+-- zeros

+decs400 apply   0E-400                  -> #00000000  Clamped

+decs401 apply   0E-101                  -> #00000000

+decs402 apply   #00000000               -> 0E-101

+decs403 apply   0.000000E-95            -> #00000000

+decs404 apply   #00000000               -> 0E-101

+decs405 apply   0E-2                    -> #22300000

+decs406 apply   #22300000               -> 0.00

+decs407 apply   0                       -> #22500000

+decs408 apply   #22500000               -> 0

+decs409 apply   0E+3                    -> #22800000

+decs410 apply   #22800000               -> 0E+3

+decs411 apply   0E+90                   -> #43f00000

+decs412 apply   #43f00000               -> 0E+90

+-- clamped zeros...

+decs413 apply   0E+91                   -> #43f00000  Clamped

+decs414 apply   #43f00000               -> 0E+90

+decs415 apply   0E+96                   -> #43f00000  Clamped

+decs416 apply   #43f00000               -> 0E+90

+decs417 apply   0E+400                  -> #43f00000  Clamped

+decs418 apply   #43f00000               -> 0E+90

+

+-- negative zeros

+decs420 apply   -0E-400                 -> #80000000  Clamped

+decs421 apply   -0E-101                 -> #80000000

+decs422 apply   #80000000               -> -0E-101

+decs423 apply   -0.000000E-95           -> #80000000

+decs424 apply   #80000000               -> -0E-101

+decs425 apply   -0E-2                   -> #a2300000

+decs426 apply   #a2300000               -> -0.00

+decs427 apply   -0                      -> #a2500000

+decs428 apply   #a2500000               -> -0

+decs429 apply   -0E+3                   -> #a2800000

+decs430 apply   #a2800000               -> -0E+3

+decs431 apply   -0E+90                  -> #c3f00000

+decs432 apply   #c3f00000               -> -0E+90

+-- clamped zeros...

+decs433 apply   -0E+91                  -> #c3f00000  Clamped

+decs434 apply   #c3f00000               -> -0E+90

+decs435 apply   -0E+96                  -> #c3f00000  Clamped

+decs436 apply   #c3f00000               -> -0E+90

+decs437 apply   -0E+400                 -> #c3f00000  Clamped

+decs438 apply   #c3f00000               -> -0E+90

+

+-- Specials

+decs500 apply   Infinity  -> #78000000

+decs501 apply   #78787878 -> #78000000

+decs502 apply   #78000000 -> Infinity

+decs503 apply   #79797979 -> #78000000

+decs504 apply   #79000000 -> Infinity

+decs505 apply   #7a7a7a7a -> #78000000

+decs506 apply   #7a000000 -> Infinity

+decs507 apply   #7b7b7b7b -> #78000000

+decs508 apply   #7b000000 -> Infinity

+decs509 apply   #7c7c7c7c -> #7c0c7c7c

+

+decs510 apply   NaN       -> #7c000000

+decs511 apply   #7c000000 -> NaN

+decs512 apply   #7d7d7d7d -> #7c0d7d7d

+decs513 apply   #7d000000 -> NaN

+decs514 apply   #7e7e7e7e -> #7e0e7c7e

+decs515 apply   #7e000000 -> sNaN

+decs516 apply   #7f7f7f7f -> #7e0f7c7f

+decs517 apply   #7f000000 -> sNaN

+decs518 apply   #7fffffff -> sNaN999999

+decs519 apply   #7fffffff -> #7e03fcff

+

+decs520 apply   -Infinity -> #f8000000

+decs521 apply   #f8787878 -> #f8000000

+decs522 apply   #f8000000 -> -Infinity

+decs523 apply   #f9797979 -> #f8000000

+decs524 apply   #f9000000 -> -Infinity

+decs525 apply   #fa7a7a7a -> #f8000000

+decs526 apply   #fa000000 -> -Infinity

+decs527 apply   #fb7b7b7b -> #f8000000

+decs528 apply   #fb000000 -> -Infinity

+

+decs529 apply   -NaN      -> #fc000000

+decs530 apply   #fc7c7c7c -> #fc0c7c7c

+decs531 apply   #fc000000 -> -NaN

+decs532 apply   #fd7d7d7d -> #fc0d7d7d

+decs533 apply   #fd000000 -> -NaN

+decs534 apply   #fe7e7e7e -> #fe0e7c7e

+decs535 apply   #fe000000 -> -sNaN

+decs536 apply   #ff7f7f7f -> #fe0f7c7f

+decs537 apply   #ff000000 -> -sNaN

+decs538 apply   #ffffffff -> -sNaN999999

+decs539 apply   #ffffffff -> #fe03fcff

+

+-- diagnostic NaNs

+decs540 apply   NaN       -> #7c000000

+decs541 apply   NaN0      -> #7c000000

+decs542 apply   NaN1      -> #7c000001

+decs543 apply   NaN12     -> #7c000012

+decs544 apply   NaN79     -> #7c000079

+decs545 apply   NaN12345   -> #7c0049c5

+decs546 apply   NaN123456  -> #7c028e56

+decs547 apply   NaN799799  -> #7c0f7fdf

+decs548 apply   NaN999999  -> #7c03fcff

+

+

+-- fold-down full sequence

+decs601 apply   1E+96                   -> #47f00000 Clamped

+decs602 apply   #47f00000               -> 1.000000E+96

+decs603 apply   1E+95                   -> #43f20000 Clamped

+decs604 apply   #43f20000               -> 1.00000E+95

+decs605 apply   1E+94                   -> #43f04000 Clamped

+decs606 apply   #43f04000               -> 1.0000E+94

+decs607 apply   1E+93                   -> #43f00400 Clamped

+decs608 apply   #43f00400               -> 1.000E+93

+decs609 apply   1E+92                   -> #43f00080 Clamped

+decs610 apply   #43f00080               -> 1.00E+92

+decs611 apply   1E+91                   -> #43f00010 Clamped

+decs612 apply   #43f00010               -> 1.0E+91

+decs613 apply   1E+90                   -> #43f00001

+decs614 apply   #43f00001               -> 1E+90

+

+

+-- Selected DPD codes

+decs700 apply   #22500000       -> 0

+decs701 apply   #22500009       -> 9

+decs702 apply   #22500010       -> 10

+decs703 apply   #22500019       -> 19

+decs704 apply   #22500020       -> 20

+decs705 apply   #22500029       -> 29

+decs706 apply   #22500030       -> 30

+decs707 apply   #22500039       -> 39

+decs708 apply   #22500040       -> 40

+decs709 apply   #22500049       -> 49

+decs710 apply   #22500050       -> 50

+decs711 apply   #22500059       -> 59

+decs712 apply   #22500060       -> 60

+decs713 apply   #22500069       -> 69

+decs714 apply   #22500070       -> 70

+decs715 apply   #22500071       -> 71

+decs716 apply   #22500072       -> 72

+decs717 apply   #22500073       -> 73

+decs718 apply   #22500074       -> 74

+decs719 apply   #22500075       -> 75

+decs720 apply   #22500076       -> 76

+decs721 apply   #22500077       -> 77

+decs722 apply   #22500078       -> 78

+decs723 apply   #22500079       -> 79

+

+decs730 apply   #2250029e       -> 994

+decs731 apply   #2250029f       -> 995

+decs732 apply   #225002a0       -> 520

+decs733 apply   #225002a1       -> 521

+

+-- DPD: one of each of the huffman groups

+decs740 apply   #225003f7       -> 777

+decs741 apply   #225003f8       -> 778

+decs742 apply   #225003eb       -> 787

+decs743 apply   #2250037d       -> 877

+decs744 apply   #2250039f       -> 997

+decs745 apply   #225003bf       -> 979

+decs746 apply   #225003df       -> 799

+decs747 apply   #2250006e       -> 888

+

+

+-- DPD all-highs cases (includes the 24 redundant codes)

+decs750 apply   #2250006e       -> 888

+decs751 apply   #2250016e       -> 888

+decs752 apply   #2250026e       -> 888

+decs753 apply   #2250036e       -> 888

+decs754 apply   #2250006f       -> 889

+decs755 apply   #2250016f       -> 889

+decs756 apply   #2250026f       -> 889

+decs757 apply   #2250036f       -> 889

+

+decs760 apply   #2250007e       -> 898

+decs761 apply   #2250017e       -> 898

+decs762 apply   #2250027e       -> 898

+decs763 apply   #2250037e       -> 898

+decs764 apply   #2250007f       -> 899

+decs765 apply   #2250017f       -> 899

+decs766 apply   #2250027f       -> 899

+decs767 apply   #2250037f       -> 899

+

+decs770 apply   #225000ee       -> 988

+decs771 apply   #225001ee       -> 988

+decs772 apply   #225002ee       -> 988

+decs773 apply   #225003ee       -> 988

+decs774 apply   #225000ef       -> 989

+decs775 apply   #225001ef       -> 989

+decs776 apply   #225002ef       -> 989

+decs777 apply   #225003ef       -> 989

+

+decs780 apply   #225000fe       -> 998

+decs781 apply   #225001fe       -> 998

+decs782 apply   #225002fe       -> 998

+decs783 apply   #225003fe       -> 998

+decs784 apply   #225000ff       -> 999

+decs785 apply   #225001ff       -> 999

+decs786 apply   #225002ff       -> 999

+decs787 apply   #225003ff       -> 999

+