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/dqToIntegral.decTest b/Lib/test/decimaltestdata/dqToIntegral.decTest
new file mode 100644
index 0000000..ac50a4a
--- /dev/null
+++ b/Lib/test/decimaltestdata/dqToIntegral.decTest
@@ -0,0 +1,257 @@
+------------------------------------------------------------------------

+-- dqToIntegral.decTest -- round Quad to integral value               --

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

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

+version: 2.56

+

+-- This set of tests tests the extended specification 'round-to-integral

+-- value-exact' operations (from IEEE 854, later modified in 754r).

+-- All non-zero results are defined as being those from either copy or

+-- quantize, so those are assumed to have been tested extensively

+-- elsewhere; the tests here are for integrity, rounding mode, etc.

+-- Also, it is assumed the test harness will use these tests for both

+-- ToIntegralExact (which does set Inexact) and the fixed-name

+-- functions (which do not set Inexact).

+

+-- Note that decNumber implements an earlier definition of toIntegral

+-- which never sets Inexact; the decTest operator for that is called

+-- 'tointegral' instead of 'tointegralx'.

+

+extended:    1

+clamp:       1

+precision:   34

+maxExponent: 6144

+minExponent: -6143

+rounding:    half_even

+

+dqintx001 tointegralx      0     ->  0

+dqintx002 tointegralx      0.0   ->  0

+dqintx003 tointegralx      0.1   ->  0  Inexact Rounded

+dqintx004 tointegralx      0.2   ->  0  Inexact Rounded

+dqintx005 tointegralx      0.3   ->  0  Inexact Rounded

+dqintx006 tointegralx      0.4   ->  0  Inexact Rounded

+dqintx007 tointegralx      0.5   ->  0  Inexact Rounded

+dqintx008 tointegralx      0.6   ->  1  Inexact Rounded

+dqintx009 tointegralx      0.7   ->  1  Inexact Rounded

+dqintx010 tointegralx      0.8   ->  1  Inexact Rounded

+dqintx011 tointegralx      0.9   ->  1  Inexact Rounded

+dqintx012 tointegralx      1     ->  1

+dqintx013 tointegralx      1.0   ->  1  Rounded

+dqintx014 tointegralx      1.1   ->  1  Inexact Rounded

+dqintx015 tointegralx      1.2   ->  1  Inexact Rounded

+dqintx016 tointegralx      1.3   ->  1  Inexact Rounded

+dqintx017 tointegralx      1.4   ->  1  Inexact Rounded

+dqintx018 tointegralx      1.5   ->  2  Inexact Rounded

+dqintx019 tointegralx      1.6   ->  2  Inexact Rounded

+dqintx020 tointegralx      1.7   ->  2  Inexact Rounded

+dqintx021 tointegralx      1.8   ->  2  Inexact Rounded

+dqintx022 tointegralx      1.9   ->  2  Inexact Rounded

+-- negatives

+dqintx031 tointegralx     -0     -> -0

+dqintx032 tointegralx     -0.0   -> -0

+dqintx033 tointegralx     -0.1   -> -0  Inexact Rounded

+dqintx034 tointegralx     -0.2   -> -0  Inexact Rounded

+dqintx035 tointegralx     -0.3   -> -0  Inexact Rounded

+dqintx036 tointegralx     -0.4   -> -0  Inexact Rounded

+dqintx037 tointegralx     -0.5   -> -0  Inexact Rounded

+dqintx038 tointegralx     -0.6   -> -1  Inexact Rounded

+dqintx039 tointegralx     -0.7   -> -1  Inexact Rounded

+dqintx040 tointegralx     -0.8   -> -1  Inexact Rounded

+dqintx041 tointegralx     -0.9   -> -1  Inexact Rounded

+dqintx042 tointegralx     -1     -> -1

+dqintx043 tointegralx     -1.0   -> -1  Rounded

+dqintx044 tointegralx     -1.1   -> -1  Inexact Rounded

+dqintx045 tointegralx     -1.2   -> -1  Inexact Rounded

+dqintx046 tointegralx     -1.3   -> -1  Inexact Rounded

+dqintx047 tointegralx     -1.4   -> -1  Inexact Rounded

+dqintx048 tointegralx     -1.5   -> -2  Inexact Rounded

+dqintx049 tointegralx     -1.6   -> -2  Inexact Rounded

+dqintx050 tointegralx     -1.7   -> -2  Inexact Rounded

+dqintx051 tointegralx     -1.8   -> -2  Inexact Rounded

+dqintx052 tointegralx     -1.9   -> -2  Inexact Rounded

+-- next two would be NaN using quantize(x, 0)

+dqintx053 tointegralx    10E+60  -> 1.0E+61

+dqintx054 tointegralx   -10E+60  -> -1.0E+61

+

+-- numbers around precision

+dqintx060 tointegralx '56267E-17'   -> '0'      Inexact Rounded

+dqintx061 tointegralx '56267E-5'    -> '1'      Inexact Rounded

+dqintx062 tointegralx '56267E-2'    -> '563'    Inexact Rounded

+dqintx063 tointegralx '56267E-1'    -> '5627'   Inexact Rounded

+dqintx065 tointegralx '56267E-0'    -> '56267'

+dqintx066 tointegralx '56267E+0'    -> '56267'

+dqintx067 tointegralx '56267E+1'    -> '5.6267E+5'

+dqintx068 tointegralx '56267E+9'    -> '5.6267E+13'

+dqintx069 tointegralx '56267E+10'   -> '5.6267E+14'

+dqintx070 tointegralx '56267E+11'   -> '5.6267E+15'

+dqintx071 tointegralx '56267E+12'   -> '5.6267E+16'

+dqintx072 tointegralx '56267E+13'   -> '5.6267E+17'

+dqintx073 tointegralx '1.23E+96'    -> '1.23E+96'

+dqintx074 tointegralx '1.23E+6144'  -> #47ffd300000000000000000000000000 Clamped

+

+dqintx080 tointegralx '-56267E-10'  -> '-0'      Inexact Rounded

+dqintx081 tointegralx '-56267E-5'   -> '-1'      Inexact Rounded

+dqintx082 tointegralx '-56267E-2'   -> '-563'    Inexact Rounded

+dqintx083 tointegralx '-56267E-1'   -> '-5627'   Inexact Rounded

+dqintx085 tointegralx '-56267E-0'   -> '-56267'

+dqintx086 tointegralx '-56267E+0'   -> '-56267'

+dqintx087 tointegralx '-56267E+1'   -> '-5.6267E+5'

+dqintx088 tointegralx '-56267E+9'   -> '-5.6267E+13'

+dqintx089 tointegralx '-56267E+10'  -> '-5.6267E+14'

+dqintx090 tointegralx '-56267E+11'  -> '-5.6267E+15'

+dqintx091 tointegralx '-56267E+12'  -> '-5.6267E+16'

+dqintx092 tointegralx '-56267E+13'  -> '-5.6267E+17'

+dqintx093 tointegralx '-1.23E+96'   -> '-1.23E+96'

+dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped

+

+-- subnormal inputs

+dqintx100 tointegralx        1E-299 -> 0  Inexact Rounded

+dqintx101 tointegralx      0.1E-299 -> 0  Inexact Rounded

+dqintx102 tointegralx     0.01E-299 -> 0  Inexact Rounded

+dqintx103 tointegralx        0E-299 -> 0

+

+-- specials and zeros

+dqintx120 tointegralx 'Inf'       ->  Infinity

+dqintx121 tointegralx '-Inf'      -> -Infinity

+dqintx122 tointegralx   NaN       ->  NaN

+dqintx123 tointegralx  sNaN       ->  NaN  Invalid_operation

+dqintx124 tointegralx     0       ->  0

+dqintx125 tointegralx    -0       -> -0

+dqintx126 tointegralx     0.000   ->  0

+dqintx127 tointegralx     0.00    ->  0

+dqintx128 tointegralx     0.0     ->  0

+dqintx129 tointegralx     0       ->  0

+dqintx130 tointegralx     0E-3    ->  0

+dqintx131 tointegralx     0E-2    ->  0

+dqintx132 tointegralx     0E-1    ->  0

+dqintx133 tointegralx     0E-0    ->  0

+dqintx134 tointegralx     0E+1    ->  0E+1

+dqintx135 tointegralx     0E+2    ->  0E+2

+dqintx136 tointegralx     0E+3    ->  0E+3

+dqintx137 tointegralx     0E+4    ->  0E+4

+dqintx138 tointegralx     0E+5    ->  0E+5

+dqintx139 tointegralx    -0.000   -> -0

+dqintx140 tointegralx    -0.00    -> -0

+dqintx141 tointegralx    -0.0     -> -0

+dqintx142 tointegralx    -0       -> -0

+dqintx143 tointegralx    -0E-3    -> -0

+dqintx144 tointegralx    -0E-2    -> -0

+dqintx145 tointegralx    -0E-1    -> -0

+dqintx146 tointegralx    -0E-0    -> -0

+dqintx147 tointegralx    -0E+1    -> -0E+1

+dqintx148 tointegralx    -0E+2    -> -0E+2

+dqintx149 tointegralx    -0E+3    -> -0E+3

+dqintx150 tointegralx    -0E+4    -> -0E+4

+dqintx151 tointegralx    -0E+5    -> -0E+5

+-- propagating NaNs

+dqintx152 tointegralx   NaN808    ->  NaN808

+dqintx153 tointegralx  sNaN080    ->  NaN80  Invalid_operation

+dqintx154 tointegralx  -NaN808    -> -NaN808

+dqintx155 tointegralx -sNaN080    -> -NaN80  Invalid_operation

+dqintx156 tointegralx  -NaN       -> -NaN

+dqintx157 tointegralx -sNaN       -> -NaN    Invalid_operation

+

+-- examples

+rounding:    half_up

+dqintx200 tointegralx     2.1    -> 2            Inexact Rounded

+dqintx201 tointegralx   100      -> 100

+dqintx202 tointegralx   100.0    -> 100          Rounded

+dqintx203 tointegralx   101.5    -> 102          Inexact Rounded

+dqintx204 tointegralx  -101.5    -> -102         Inexact Rounded

+dqintx205 tointegralx   10E+5    -> 1.0E+6

+dqintx206 tointegralx  7.89E+77  -> 7.89E+77

+dqintx207 tointegralx   -Inf     -> -Infinity

+

+

+-- all rounding modes

+rounding:    half_even

+dqintx210 tointegralx     55.5   ->  56  Inexact Rounded

+dqintx211 tointegralx     56.5   ->  56  Inexact Rounded

+dqintx212 tointegralx     57.5   ->  58  Inexact Rounded

+dqintx213 tointegralx    -55.5   -> -56  Inexact Rounded

+dqintx214 tointegralx    -56.5   -> -56  Inexact Rounded

+dqintx215 tointegralx    -57.5   -> -58  Inexact Rounded

+

+rounding:    half_up

+

+dqintx220 tointegralx     55.5   ->  56  Inexact Rounded

+dqintx221 tointegralx     56.5   ->  57  Inexact Rounded

+dqintx222 tointegralx     57.5   ->  58  Inexact Rounded

+dqintx223 tointegralx    -55.5   -> -56  Inexact Rounded

+dqintx224 tointegralx    -56.5   -> -57  Inexact Rounded

+dqintx225 tointegralx    -57.5   -> -58  Inexact Rounded

+

+rounding:    half_down

+

+dqintx230 tointegralx     55.5   ->  55  Inexact Rounded

+dqintx231 tointegralx     56.5   ->  56  Inexact Rounded

+dqintx232 tointegralx     57.5   ->  57  Inexact Rounded

+dqintx233 tointegralx    -55.5   -> -55  Inexact Rounded

+dqintx234 tointegralx    -56.5   -> -56  Inexact Rounded

+dqintx235 tointegralx    -57.5   -> -57  Inexact Rounded

+

+rounding:    up

+

+dqintx240 tointegralx     55.3   ->  56  Inexact Rounded

+dqintx241 tointegralx     56.3   ->  57  Inexact Rounded

+dqintx242 tointegralx     57.3   ->  58  Inexact Rounded

+dqintx243 tointegralx    -55.3   -> -56  Inexact Rounded

+dqintx244 tointegralx    -56.3   -> -57  Inexact Rounded

+dqintx245 tointegralx    -57.3   -> -58  Inexact Rounded

+

+rounding:    down

+

+dqintx250 tointegralx     55.7   ->  55  Inexact Rounded

+dqintx251 tointegralx     56.7   ->  56  Inexact Rounded

+dqintx252 tointegralx     57.7   ->  57  Inexact Rounded

+dqintx253 tointegralx    -55.7   -> -55  Inexact Rounded

+dqintx254 tointegralx    -56.7   -> -56  Inexact Rounded

+dqintx255 tointegralx    -57.7   -> -57  Inexact Rounded

+

+rounding:    ceiling

+

+dqintx260 tointegralx     55.3   ->  56  Inexact Rounded

+dqintx261 tointegralx     56.3   ->  57  Inexact Rounded

+dqintx262 tointegralx     57.3   ->  58  Inexact Rounded

+dqintx263 tointegralx    -55.3   -> -55  Inexact Rounded

+dqintx264 tointegralx    -56.3   -> -56  Inexact Rounded

+dqintx265 tointegralx    -57.3   -> -57  Inexact Rounded

+

+rounding:    floor

+

+dqintx270 tointegralx     55.7   ->  55  Inexact Rounded

+dqintx271 tointegralx     56.7   ->  56  Inexact Rounded

+dqintx272 tointegralx     57.7   ->  57  Inexact Rounded

+dqintx273 tointegralx    -55.7   -> -56  Inexact Rounded

+dqintx274 tointegralx    -56.7   -> -57  Inexact Rounded

+dqintx275 tointegralx    -57.7   -> -58  Inexact Rounded

+

+-- Int and uInt32 edge values for testing conversions

+dqintx300 tointegralx -2147483646  -> -2147483646

+dqintx301 tointegralx -2147483647  -> -2147483647

+dqintx302 tointegralx -2147483648  -> -2147483648

+dqintx303 tointegralx -2147483649  -> -2147483649

+dqintx304 tointegralx  2147483646  ->  2147483646

+dqintx305 tointegralx  2147483647  ->  2147483647

+dqintx306 tointegralx  2147483648  ->  2147483648

+dqintx307 tointegralx  2147483649  ->  2147483649

+dqintx308 tointegralx  4294967294  ->  4294967294

+dqintx309 tointegralx  4294967295  ->  4294967295

+dqintx310 tointegralx  4294967296  ->  4294967296

+dqintx311 tointegralx  4294967297  ->  4294967297

+