]> granicus.if.org Git - python/commitdiff
Merged revisions 59107-59186 via svnmerge from
authorGuido van Rossum <guido@python.org>
Mon, 26 Nov 2007 23:23:18 +0000 (23:23 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 26 Nov 2007 23:23:18 +0000 (23:23 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

(Note: some conflicts in the PCbuild9 directory reverted.  Sorry Christian!)

........
  r59120 | christian.heimes | 2007-11-22 03:21:16 -0800 (Thu, 22 Nov 2007) | 3 lines

  Backport of the PCbuild9 directory from the py3k branch.
  I've finished the last task for the PCbuild9 directory today. I don't think there is much left to do. Now you can all play around with the shiny new VS 2008 and try the PGO builds. I was able to get a speed improvement of about 10% on py3k.
  Have fun! :)
........
  r59126 | brett.cannon | 2007-11-22 16:06:51 -0800 (Thu, 22 Nov 2007) | 2 lines

  Fix a bug in the test for using __loader__.get_data().
........
  r59131 | christian.heimes | 2007-11-22 23:05:03 -0800 (Thu, 22 Nov 2007) | 1 line

  Backport of PCbuild9 fixes from py3k r59130
........
  r59132 | christian.heimes | 2007-11-23 01:10:36 -0800 (Fri, 23 Nov 2007) | 2 lines

  Applied patch #1754273 and #1754271 from Thomas Glee
  The patches are adding deprecation warnings for back ticks and <>
........
  r59133 | christian.heimes | 2007-11-23 04:12:02 -0800 (Fri, 23 Nov 2007) | 2 lines

  Fixed problems in the last commit. Filenames and line numbers weren't reported correctly.
  Backquotes still don't report the correct file. The AST nodes only contain the line number but not the file name.
........
  r59134 | christian.heimes | 2007-11-23 04:16:35 -0800 (Fri, 23 Nov 2007) | 1 line

  How did the comment get there?
........
  r59135 | christian.heimes | 2007-11-23 05:25:31 -0800 (Fri, 23 Nov 2007) | 1 line

  And yet another fix for the patch. Paul Moore has send me a note that I've missed a declaration. The additional code has moved the declaration in the middle of the block.
........
  r59136 | andrew.kuchling | 2007-11-23 05:37:39 -0800 (Fri, 23 Nov 2007) | 1 line

  Add item
........
  r59137 | skip.montanaro | 2007-11-23 09:08:35 -0800 (Fri, 23 Nov 2007) | 2 lines

  Make trace and doctest play nice together (issue 1429818).  Will backport.
........
  r59139 | skip.montanaro | 2007-11-23 09:12:47 -0800 (Fri, 23 Nov 2007) | 1 line

  issue 1429818
........
  r59144 | facundo.batista | 2007-11-23 09:59:00 -0800 (Fri, 23 Nov 2007) | 10 lines

  Major change in the internal structure of the Decimal
  number: now it does not store the mantissa as a tuple
  of numbers, but as a string.

  This avoids a lot of conversions, and achieves a
  speedup of 40%. The API remains intact.

  Thanks Mark Dickinson.
........
  r59146 | facundo.batista | 2007-11-23 10:14:50 -0800 (Fri, 23 Nov 2007) | 3 lines

  Test cases from Cowlishaw, v2.57. All are pased cleanly.
........
  r59156 | christian.heimes | 2007-11-23 17:36:02 -0800 (Fri, 23 Nov 2007) | 2 lines

  Added filename to compiling struct based on Martin's suggestion.
  I'm wonder why I was trying to add the filename to the node all the time. The compiling struct is more obvious.
........
  r59158 | christian.heimes | 2007-11-23 17:53:59 -0800 (Fri, 23 Nov 2007) | 2 lines

  Backport of fixes from py3k branch
  svn merge -r59131:HEAD ../../py3k/PCbuild9/ .
........
  r59159 | skip.montanaro | 2007-11-23 20:29:08 -0800 (Fri, 23 Nov 2007) | 1 line

  revert change that breaks test_doctest (which I forgot to run - sorry)
........
  r59162 | skip.montanaro | 2007-11-23 20:31:15 -0800 (Fri, 23 Nov 2007) | 1 line

  revert
........
  r59164 | georg.brandl | 2007-11-24 03:31:46 -0800 (Sat, 24 Nov 2007) | 3 lines

  #1344: document that you need to open std{in,out,err} with PIPE if you want
  communicate() to work as described.
........
  r59165 | georg.brandl | 2007-11-24 03:39:13 -0800 (Sat, 24 Nov 2007) | 2 lines

  #1467: fix documentation for TestResult.add{Error,Failure}.
........
  r59166 | georg.brandl | 2007-11-24 03:42:14 -0800 (Sat, 24 Nov 2007) | 2 lines

  #1355: remove mention of PyXML from xml.dom docs.
........
  r59169 | amaury.forgeotdarc | 2007-11-24 05:20:22 -0800 (Sat, 24 Nov 2007) | 2 lines

  Warning "<> not supported in 3.x" should be enabled only when the -3 option is set.
........
  r59170 | amaury.forgeotdarc | 2007-11-24 05:44:17 -0800 (Sat, 24 Nov 2007) | 3 lines

  Issue #1445: Fix a SystemError when accessing the ``cell_contents``
  attribute of an empty cell object.  Now a ValueError is raised.
........
  r59172 | georg.brandl | 2007-11-24 05:56:09 -0800 (Sat, 24 Nov 2007) | 3 lines

  #1735632: add O_NOATIME constant to os module.
  Also document a few other O_ constants that were missing from documentation.
........
  r59173 | skip.montanaro | 2007-11-24 06:30:47 -0800 (Sat, 24 Nov 2007) | 1 line

  back in these go - thanks to Titus Brown for the fix
........
  r59176 | martin.v.loewis | 2007-11-24 10:33:40 -0800 (Sat, 24 Nov 2007) | 2 lines

  Bug #1494: Document that appendChild removes first.
........
  r59186 | guido.van.rossum | 2007-11-26 14:16:49 -0800 (Mon, 26 Nov 2007) | 2 lines

  A thread-less variant of brownian.py, submitted by Michele Simoniato.
........

157 files changed:
Demo/tkinter/guido/brownian2.py [new file with mode: 0644]
Doc/library/os.rst
Doc/library/subprocess.rst
Doc/library/unittest.rst
Doc/library/xml.dom.rst
Doc/whatsnew/2.6.rst
Lib/decimal.py
Lib/doctest.py
Lib/test/decimaltestdata/abs.decTest
Lib/test/decimaltestdata/add.decTest
Lib/test/decimaltestdata/and.decTest
Lib/test/decimaltestdata/base.decTest
Lib/test/decimaltestdata/clamp.decTest
Lib/test/decimaltestdata/class.decTest
Lib/test/decimaltestdata/compare.decTest
Lib/test/decimaltestdata/comparetotal.decTest
Lib/test/decimaltestdata/comparetotmag.decTest
Lib/test/decimaltestdata/copy.decTest
Lib/test/decimaltestdata/copyabs.decTest
Lib/test/decimaltestdata/copynegate.decTest
Lib/test/decimaltestdata/copysign.decTest
Lib/test/decimaltestdata/ddAbs.decTest
Lib/test/decimaltestdata/ddAdd.decTest
Lib/test/decimaltestdata/ddAnd.decTest
Lib/test/decimaltestdata/ddBase.decTest
Lib/test/decimaltestdata/ddCanonical.decTest
Lib/test/decimaltestdata/ddClass.decTest
Lib/test/decimaltestdata/ddCompare.decTest
Lib/test/decimaltestdata/ddCompareSig.decTest
Lib/test/decimaltestdata/ddCompareTotal.decTest
Lib/test/decimaltestdata/ddCompareTotalMag.decTest
Lib/test/decimaltestdata/ddCopy.decTest
Lib/test/decimaltestdata/ddCopyAbs.decTest
Lib/test/decimaltestdata/ddCopyNegate.decTest
Lib/test/decimaltestdata/ddCopySign.decTest
Lib/test/decimaltestdata/ddDivide.decTest
Lib/test/decimaltestdata/ddDivideInt.decTest
Lib/test/decimaltestdata/ddEncode.decTest
Lib/test/decimaltestdata/ddFMA.decTest
Lib/test/decimaltestdata/ddInvert.decTest
Lib/test/decimaltestdata/ddLogB.decTest
Lib/test/decimaltestdata/ddMax.decTest
Lib/test/decimaltestdata/ddMaxMag.decTest
Lib/test/decimaltestdata/ddMin.decTest
Lib/test/decimaltestdata/ddMinMag.decTest
Lib/test/decimaltestdata/ddMinus.decTest
Lib/test/decimaltestdata/ddMultiply.decTest
Lib/test/decimaltestdata/ddNextMinus.decTest
Lib/test/decimaltestdata/ddNextPlus.decTest
Lib/test/decimaltestdata/ddNextToward.decTest
Lib/test/decimaltestdata/ddOr.decTest
Lib/test/decimaltestdata/ddPlus.decTest
Lib/test/decimaltestdata/ddQuantize.decTest
Lib/test/decimaltestdata/ddReduce.decTest
Lib/test/decimaltestdata/ddRemainder.decTest
Lib/test/decimaltestdata/ddRemainderNear.decTest
Lib/test/decimaltestdata/ddRotate.decTest
Lib/test/decimaltestdata/ddSameQuantum.decTest
Lib/test/decimaltestdata/ddScaleB.decTest
Lib/test/decimaltestdata/ddShift.decTest
Lib/test/decimaltestdata/ddSubtract.decTest
Lib/test/decimaltestdata/ddToIntegral.decTest
Lib/test/decimaltestdata/ddXor.decTest
Lib/test/decimaltestdata/decDouble.decTest
Lib/test/decimaltestdata/decQuad.decTest
Lib/test/decimaltestdata/decSingle.decTest
Lib/test/decimaltestdata/divide.decTest
Lib/test/decimaltestdata/divideint.decTest
Lib/test/decimaltestdata/dqAbs.decTest
Lib/test/decimaltestdata/dqAdd.decTest
Lib/test/decimaltestdata/dqAnd.decTest
Lib/test/decimaltestdata/dqBase.decTest
Lib/test/decimaltestdata/dqCanonical.decTest
Lib/test/decimaltestdata/dqClass.decTest
Lib/test/decimaltestdata/dqCompare.decTest
Lib/test/decimaltestdata/dqCompareSig.decTest
Lib/test/decimaltestdata/dqCompareTotal.decTest
Lib/test/decimaltestdata/dqCompareTotalMag.decTest
Lib/test/decimaltestdata/dqCopy.decTest
Lib/test/decimaltestdata/dqCopyAbs.decTest
Lib/test/decimaltestdata/dqCopyNegate.decTest
Lib/test/decimaltestdata/dqCopySign.decTest
Lib/test/decimaltestdata/dqDivide.decTest
Lib/test/decimaltestdata/dqDivideInt.decTest
Lib/test/decimaltestdata/dqEncode.decTest
Lib/test/decimaltestdata/dqFMA.decTest
Lib/test/decimaltestdata/dqInvert.decTest
Lib/test/decimaltestdata/dqLogB.decTest
Lib/test/decimaltestdata/dqMax.decTest
Lib/test/decimaltestdata/dqMaxMag.decTest
Lib/test/decimaltestdata/dqMin.decTest
Lib/test/decimaltestdata/dqMinMag.decTest
Lib/test/decimaltestdata/dqMinus.decTest
Lib/test/decimaltestdata/dqMultiply.decTest
Lib/test/decimaltestdata/dqNextMinus.decTest
Lib/test/decimaltestdata/dqNextPlus.decTest
Lib/test/decimaltestdata/dqNextToward.decTest
Lib/test/decimaltestdata/dqOr.decTest
Lib/test/decimaltestdata/dqPlus.decTest
Lib/test/decimaltestdata/dqQuantize.decTest
Lib/test/decimaltestdata/dqReduce.decTest
Lib/test/decimaltestdata/dqRemainder.decTest
Lib/test/decimaltestdata/dqRemainderNear.decTest
Lib/test/decimaltestdata/dqRotate.decTest
Lib/test/decimaltestdata/dqSameQuantum.decTest
Lib/test/decimaltestdata/dqScaleB.decTest
Lib/test/decimaltestdata/dqShift.decTest
Lib/test/decimaltestdata/dqSubtract.decTest
Lib/test/decimaltestdata/dqToIntegral.decTest
Lib/test/decimaltestdata/dqXor.decTest
Lib/test/decimaltestdata/dsBase.decTest
Lib/test/decimaltestdata/dsEncode.decTest
Lib/test/decimaltestdata/exp.decTest
Lib/test/decimaltestdata/fma.decTest
Lib/test/decimaltestdata/inexact.decTest
Lib/test/decimaltestdata/invert.decTest
Lib/test/decimaltestdata/ln.decTest
Lib/test/decimaltestdata/log10.decTest
Lib/test/decimaltestdata/logb.decTest
Lib/test/decimaltestdata/max.decTest
Lib/test/decimaltestdata/maxmag.decTest
Lib/test/decimaltestdata/min.decTest
Lib/test/decimaltestdata/minmag.decTest
Lib/test/decimaltestdata/minus.decTest
Lib/test/decimaltestdata/multiply.decTest
Lib/test/decimaltestdata/nextminus.decTest
Lib/test/decimaltestdata/nextplus.decTest
Lib/test/decimaltestdata/nexttoward.decTest
Lib/test/decimaltestdata/or.decTest
Lib/test/decimaltestdata/plus.decTest
Lib/test/decimaltestdata/power.decTest
Lib/test/decimaltestdata/powersqrt.decTest
Lib/test/decimaltestdata/quantize.decTest
Lib/test/decimaltestdata/randomBound32.decTest
Lib/test/decimaltestdata/randoms.decTest
Lib/test/decimaltestdata/reduce.decTest
Lib/test/decimaltestdata/remainder.decTest
Lib/test/decimaltestdata/remainderNear.decTest
Lib/test/decimaltestdata/rescale.decTest
Lib/test/decimaltestdata/rotate.decTest
Lib/test/decimaltestdata/rounding.decTest
Lib/test/decimaltestdata/samequantum.decTest
Lib/test/decimaltestdata/scaleb.decTest
Lib/test/decimaltestdata/shift.decTest
Lib/test/decimaltestdata/squareroot.decTest
Lib/test/decimaltestdata/subtract.decTest
Lib/test/decimaltestdata/testall.decTest
Lib/test/decimaltestdata/tointegral.decTest
Lib/test/decimaltestdata/tointegralx.decTest
Lib/test/decimaltestdata/xor.decTest
Lib/test/test_decimal.py
Lib/test/test_doctest.py
Lib/test/test_funcattrs.py
Lib/trace.py
Modules/posixmodule.c
Objects/cellobject.c
Python/ast.c

diff --git a/Demo/tkinter/guido/brownian2.py b/Demo/tkinter/guido/brownian2.py
new file mode 100644 (file)
index 0000000..281a645
--- /dev/null
@@ -0,0 +1,55 @@
+# Brownian motion -- an example of a NON multi-threaded Tkinter program ;)
+# By Michele Simoniato, inspired by brownian.py
+
+from Tkinter import *
+import random
+import sys
+
+WIDTH = 400
+HEIGHT = 300
+SIGMA = 10
+BUZZ = 2
+RADIUS = 2
+LAMBDA = 10
+FILL = 'red'
+
+stop = 0                                # Set when main loop exits
+root = None                             # main window
+
+def particle(canvas):                   # particle = iterator over the moves
+    r = RADIUS
+    x = random.gauss(WIDTH/2.0, SIGMA)
+    y = random.gauss(HEIGHT/2.0, SIGMA)
+    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
+    while not stop:
+        dx = random.gauss(0, BUZZ)
+        dy = random.gauss(0, BUZZ)
+        try:
+            canvas.move(p, dx, dy)
+        except TclError:
+            break
+        else:
+            yield None
+
+def move(particle): # move the particle at random time
+    particle.next()
+    dt = random.expovariate(LAMBDA)
+    root.after(int(dt*1000), move, particle)
+
+def main():
+    global root, stop
+    root = Tk()
+    canvas = Canvas(root, width=WIDTH, height=HEIGHT)
+    canvas.pack(fill='both', expand=1)
+    np = 30
+    if sys.argv[1:]:
+        np = int(sys.argv[1])
+    for i in range(np):                  # start the dance
+        move(particle(canvas))
+    try:
+        root.mainloop()
+    finally:
+        stop = 1
+
+if __name__ == '__main__':
+    main()
index a5507391644591734eadb5b01d5b07e8d5f9851d..043624451afcd09d43dfa7b738622b4ae009e13b 100644 (file)
@@ -597,14 +597,7 @@ platforms.  For descriptions of their availability and use, consult
 
 
 .. data:: O_BINARY
-
-   Option for the *flag* argument to the :func:`open` function. This can be
-   bit-wise OR'd together with those listed above. Availability: Windows.
-
-   .. % XXX need to check on the availability of this one.
-
-
-.. data:: O_NOINHERIT
+          O_NOINHERIT
           O_SHORT_LIVED
           O_TEMPORARY
           O_RANDOM
@@ -615,6 +608,15 @@ platforms.  For descriptions of their availability and use, consult
    bit-wise OR'd together. Availability: Windows.
 
 
+.. data:: O_DIRECT
+          O_DIRECTORY
+          O_NOFOLLOW
+          O_NOATIME
+
+   Options for the *flag* argument to the :func:`open` function. These are
+   GNU extensions and not present if they are not defined by the C library.
+
+
 .. data:: SEEK_SET
           SEEK_CUR
           SEEK_END
index 5ac32df2df33f943cdd8375a3aea990ed2eb2f31..d2604738ae6ffa04572779cc2dd5b392bd4707f8 100644 (file)
@@ -189,7 +189,12 @@ Instances of the :class:`Popen` class have the following methods:
 
    communicate() returns a tuple (stdout, stderr).
 
-   .. note::
+   Note that if you want to send data to the process's stdin, you need to create
+   the Popen object with ``stdin=PIPE``.  Similarly, to get anything other than
+   ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
+   ``stderr=PIPE`` too.
+
+.. note::
 
       The data read is buffered in memory, so do not use this method if the data size
       is large or unlimited.
index b1315c0e7d94065bcdaf5a4f79c3ed83227a5e61..7703ad933764b74c09036eb4c65a243d112f9949 100644 (file)
@@ -804,8 +804,9 @@ tools which support interactive reporting while tests are being run.
    Called when the test case *test* raises an unexpected exception *err* is a tuple
    of the form returned by :func:`sys.exc_info`: ``(type, value, traceback)``.
 
-   The default implementation appends ``(test, err)`` to the instance's ``errors``
-   attribute.
+   The default implementation appends a tuple ``(test, formatted_err)`` to the
+   instance's ``errors`` attribute, where *formatted_err* is a formatted
+   traceback derived from *err*.
 
 
 .. method:: TestResult.addFailure(test, err)
@@ -813,8 +814,9 @@ tools which support interactive reporting while tests are being run.
    Called when the test case *test* signals a failure. *err* is a tuple of the form
    returned by :func:`sys.exc_info`:  ``(type, value, traceback)``.
 
-   The default implementation appends ``(test, err)`` to the instance's
-   ``failures`` attribute.
+   The default implementation appends a tuple ``(test, formatted_err)`` to the
+   instance's ``failures`` attribute, where *formatted_err* is a formatted
+   traceback derived from *err*.
 
 
 .. method:: TestResult.addSuccess(test)
index e13999cd1cad748cd8444e1282926df330e7dd9d..d75db2cdca073c253191323048eb3761f32f4868 100644 (file)
@@ -29,11 +29,14 @@ representation for XML data.
 
 The Document Object Model is being defined by the W3C in stages, or "levels" in
 their terminology.  The Python mapping of the API is substantially based on the
-DOM Level 2 recommendation.  The mapping of the Level 3 specification, currently
-only available in draft form, is being developed by the `Python XML Special
-Interest Group <http://www.python.org/sigs/xml-sig/>`_ as part of the `PyXML
-package <http://pyxml.sourceforge.net/>`_.  Refer to the documentation bundled
-with that package for information on the current state of DOM Level 3 support.
+DOM Level 2 recommendation.
+
+.. XXX PyXML is dead...
+.. The mapping of the Level 3 specification, currently
+   only available in draft form, is being developed by the `Python XML Special
+   Interest Group <http://www.python.org/sigs/xml-sig/>`_ as part of the `PyXML
+   package <http://pyxml.sourceforge.net/>`_.  Refer to the documentation bundled
+   with that package for information on the current state of DOM Level 3 support.
 
 .. % What if your needs are somewhere between SAX and the DOM?  Perhaps
 .. % you cannot afford to load the entire tree in memory but you find the
@@ -74,10 +77,6 @@ implementations are free to support the strict mapping from IDL).  See section
    `Document Object Model (DOM) Level 1 Specification <http://www.w3.org/TR/REC-DOM-Level-1/>`_
       The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`.
 
-   `PyXML <http://pyxml.sourceforge.net>`_
-      Users that require a full-featured implementation of DOM should use the PyXML
-      package.
-
    `Python Language Mapping Specification <http://www.omg.org/docs/formal/02-11-05.pdf>`_
       This specifies the mapping from OMG IDL to Python.
 
@@ -364,8 +363,9 @@ All of the components of an XML document are subclasses of :class:`Node`.
 
 .. method:: Node.appendChild(newChild)
 
-   Add a new child node to this node at the end of the list of children, returning
-   *newChild*.
+   Add a new child node to this node at the end of the list of
+   children, returning *newChild*. If the node was already in
+   in the tree, it is removed first.
 
 
 .. method:: Node.insertBefore(newChild, refChild)
index 4d527165de52eedc60acc271bfc554d8e2822b68..3415c1ba431fe7a91801b4b2cb15de5a0cdbfcb9 100644 (file)
@@ -872,6 +872,10 @@ Build and C API Changes
 
 Changes to Python's build process and to the C API include:
 
+* Python 2.6 can be built with Microsoft Visual Studio 2008.
+  See the :file:`PCbuild9` directory for the build files.
+  (Implemented by Christian Heimes.)
+
 * The BerkeleyDB module now has a C API object, available as 
   ``bsddb.db.api``.   This object can be used by other C extensions
   that wish to use the :mod:`bsddb` module for their own purposes.
index faf9bf71d90783d45c2967adb55564ecca388102..7842cb25071358494ed6f6156c84b7f14e4f0688 100644 (file)
@@ -214,10 +214,10 @@ class InvalidOperation(DecimalException):
     def handle(self, context, *args):
         if args:
             if args[0] == 1:  # sNaN, must drop 's' but keep diagnostics
-                ans = Decimal((args[1]._sign, args[1]._int, 'n'))
+                ans = _dec_from_triple(args[1]._sign, args[1]._int, 'n', True)
                 return ans._fix_nan(context)
             elif args[0] == 2:
-                return Decimal( (args[1], args[2], 'n') )
+                return _dec_from_triple(args[1], args[2], 'n', True)
         return NaN
 
 
@@ -350,13 +350,13 @@ class Overflow(Inexact, Rounded):
         if sign == 0:
             if context.rounding == ROUND_CEILING:
                 return Infsign[sign]
-            return Decimal((sign, (9,)*context.prec,
-                            context.Emax-context.prec+1))
+            return _dec_from_triple(sign, '9'*context.prec,
+                            context.Emax-context.prec+1)
         if sign == 1:
             if context.rounding == ROUND_FLOOR:
                 return Infsign[sign]
-            return Decimal( (sign, (9,)*context.prec,
-                             context.Emax-context.prec+1))
+            return _dec_from_triple(sign, '9'*context.prec,
+                             context.Emax-context.prec+1)
 
 
 class Underflow(Inexact, Rounded, Subnormal):
@@ -531,13 +531,21 @@ class Decimal(object):
         Decimal("314")
         """
 
+        # Note that the coefficient, self._int, is actually stored as
+        # a string rather than as a tuple of digits.  This speeds up
+        # the "digits to integer" and "integer to digits" conversions
+        # that are used in almost every arithmetic operation on
+        # Decimals.  This is an internal detail: the as_tuple function
+        # and the Decimal constructor still deal with tuples of
+        # digits.
+
         self = object.__new__(cls)
         self._is_special = False
 
         # From an internal working value
         if isinstance(value, _WorkRep):
             self._sign = value.sign
-            self._int = tuple(map(int, str(value.int)))
+            self._int = str(value.int)
             self._exp = int(value.exp)
             return self
 
@@ -556,7 +564,7 @@ class Decimal(object):
             else:
                 self._sign = 1
             self._exp = 0
-            self._int = tuple(map(int, str(abs(value))))
+            self._int = str(abs(value))
             return self
 
         # tuple/list conversion (possibly from as_tuple())
@@ -573,7 +581,7 @@ class Decimal(object):
             self._sign = value[0]
             if value[2] == 'F':
                 # infinity: value[1] is ignored
-                self._int = (0,)
+                self._int = '0'
                 self._exp = value[2]
                 self._is_special = True
             else:
@@ -590,12 +598,12 @@ class Decimal(object):
                                          "0 through 9.")
                 if value[2] in ('n', 'N'):
                     # NaN: digits form the diagnostic
-                    self._int = tuple(digits)
+                    self._int = ''.join(map(str, digits))
                     self._exp = value[2]
                     self._is_special = True
                 elif isinstance(value[2], int):
                     # finite number: digits give the coefficient
-                    self._int = tuple(digits or [0])
+                    self._int = ''.join(map(str, digits or [0]))
                     self._exp = value[2]
                     self._is_special = False
                 else:
@@ -608,38 +616,46 @@ class Decimal(object):
             raise TypeError("Cannot convert float to Decimal.  " +
                             "First convert the float to a string")
 
-        # Other argument types may require the context during interpretation
-        if context is None:
-            context = getcontext()
-
         # From a string
         # REs insist on real strings, so we can too.
         if isinstance(value, str):
-            if _isinfinity(value):
-                self._exp = 'F'
-                self._int = (0,)
-                self._is_special = True
-                if _isinfinity(value) == 1:
-                    self._sign = 0
+            m = _parser(value)
+            if m is None:
+                if context is None:
+                    context = getcontext()
+                return context._raise_error(ConversionSyntax,
+                                "Invalid literal for Decimal: %r" % value)
+
+            if m.group('sign') == "-":
+                self._sign = 1
+            else:
+                self._sign = 0
+            intpart = m.group('int')
+            if intpart is not None:
+                # finite number
+                fracpart = m.group('frac')
+                exp = int(m.group('exp') or '0')
+                if fracpart is not None:
+                    self._int = (intpart+fracpart).lstrip('0') or '0'
+                    self._exp = exp - len(fracpart)
                 else:
-                    self._sign = 1
-                return self
-            if _isnan(value):
-                sig, sign, diag = _isnan(value)
-                self._is_special = True
-                if sig == 1:
-                    self._exp = 'n'  # qNaN
-                else:  # sig == 2
-                    self._exp = 'N'  # sNaN
-                self._sign = sign
-                self._int = tuple(map(int, diag))  # Diagnostic info
-                return self
-            try:
-                self._sign, self._int, self._exp = _string2exact(value)
-            except ValueError:
+                    self._int = intpart.lstrip('0') or '0'
+                    self._exp = exp
+                self._is_special = False
+            else:
+                diag = m.group('diag')
+                if diag is not None:
+                    # NaN
+                    self._int = diag.lstrip('0')
+                    if m.group('signal'):
+                        self._exp = 'N'
+                    else:
+                        self._exp = 'n'
+                else:
+                    # infinity
+                    self._int = '0'
+                    self._exp = 'F'
                 self._is_special = True
-                return context._raise_error(ConversionSyntax,
-                                   "Invalid literal for Decimal: %r" % value)
             return self
 
         raise TypeError("Cannot convert %r to Decimal" % value)
@@ -709,7 +725,7 @@ class Decimal(object):
 
         NaNs and infinities are considered nonzero.
         """
-        return self._is_special or self._int[0] != 0
+        return self._is_special or self._int != '0'
 
     def __cmp__(self, other):
         other = _convert_other(other)
@@ -743,8 +759,8 @@ class Decimal(object):
         self_adjusted = self.adjusted()
         other_adjusted = other.adjusted()
         if self_adjusted == other_adjusted:
-            self_padded = self._int + (0,)*(self._exp - other._exp)
-            other_padded = other._int + (0,)*(other._exp - self._exp)
+            self_padded = self._int + '0'*(self._exp - other._exp)
+            other_padded = other._int + '0'*(other._exp - self._exp)
             return cmp(self_padded, other_padded) * (-1)**self._sign
         elif self_adjusted > other_adjusted:
             return (-1)**self._sign
@@ -827,7 +843,7 @@ class Decimal(object):
 
         To show the internals exactly as they are.
         """
-        return (self._sign, self._int, self._exp)
+        return (self._sign, tuple(map(int, self._int)), self._exp)
 
     def __repr__(self):
         """Represents the number as an instance of Decimal."""
@@ -843,10 +859,10 @@ class Decimal(object):
         if self._is_special:
             if self._isnan():
                 minus = '-'*self._sign
-                if self._int == (0,):
+                if self._int == '0':
                     info = ''
                 else:
-                    info = ''.join(map(str, self._int))
+                    info = self._int
                 if self._isnan() == 2:
                     return minus + 'sNaN' + info
                 return minus + 'NaN' + info
@@ -857,7 +873,7 @@ class Decimal(object):
         if context is None:
             context = getcontext()
 
-        tmp = list(map(str, self._int))
+        tmp = list(self._int)
         numdigits = len(self._int)
         leftdigits = self._exp + numdigits
         if eng and not self:  # self = 0eX wants 0[.0[0]]eY, not [[0]0]0eY
@@ -1030,7 +1046,7 @@ class Decimal(object):
             sign = min(self._sign, other._sign)
             if negativezero:
                 sign = 1
-            ans = Decimal( (sign, (0,), exp))
+            ans = _dec_from_triple(sign, '0', exp)
             if shouldround:
                 ans = ans._fix(context)
             return ans
@@ -1055,7 +1071,7 @@ class Decimal(object):
         if op1.sign != op2.sign:
             # Equal and opposite
             if op1.int == op2.int:
-                ans = Decimal((negativezero, (0,), exp))
+                ans = _dec_from_triple(negativezero, '0', exp)
                 if shouldround:
                     ans = ans._fix(context)
                 return ans
@@ -1121,7 +1137,7 @@ class Decimal(object):
         For example:
         Decimal('5.624e10')._increment() == Decimal('5.625e10')
         """
-        L = list(self._int)
+        L = list(map(int, self._int))
         L[-1] += 1
         spot = len(L)-1
         while L[spot] == 10:
@@ -1131,7 +1147,7 @@ class Decimal(object):
                 break
             L[spot-1] += 1
             spot -= 1
-        return Decimal((self._sign, L, self._exp))
+        return _dec_from_triple(self._sign, "".join(map(str, L)), self._exp)
 
     def __mul__(self, other, context=None):
         """Return self * other.
@@ -1167,20 +1183,20 @@ class Decimal(object):
 
         # Special case for multiplying by zero
         if not self or not other:
-            ans = Decimal((resultsign, (0,), resultexp))
+            ans = _dec_from_triple(resultsign, '0', resultexp)
             if shouldround:
                 # Fixing in case the exponent is out of bounds
                 ans = ans._fix(context)
             return ans
 
         # Special case for multiplying by power of 10
-        if self._int == (1,):
-            ans = Decimal((resultsign, other._int, resultexp))
+        if self._int == '1':
+            ans = _dec_from_triple(resultsign, other._int, resultexp)
             if shouldround:
                 ans = ans._fix(context)
             return ans
-        if other._int == (1,):
-            ans = Decimal((resultsign, self._int, resultexp))
+        if other._int == '1':
+            ans = _dec_from_triple(resultsign, self._int, resultexp)
             if shouldround:
                 ans = ans._fix(context)
             return ans
@@ -1188,9 +1204,7 @@ class Decimal(object):
         op1 = _WorkRep(self)
         op2 = _WorkRep(other)
 
-        ans = Decimal((resultsign,
-                       tuple(map(int, str(op1.int * op2.int))),
-                       resultexp))
+        ans = _dec_from_triple(resultsign, str(op1.int * op2.int), resultexp)
         if shouldround:
             ans = ans._fix(context)
 
@@ -1221,7 +1235,7 @@ class Decimal(object):
 
             if other._isinfinity():
                 context._raise_error(Clamped, 'Division by infinity')
-                return Decimal((sign, (0,), context.Etiny()))
+                return _dec_from_triple(sign, '0', context.Etiny())
 
         # Special cases for zeroes
         if not other:
@@ -1253,7 +1267,7 @@ class Decimal(object):
                     coeff //= 10
                     exp += 1
 
-        ans = Decimal((sign, list(map(int, str(coeff))), exp))
+        ans = _dec_from_triple(sign, str(coeff), exp)
         return ans._fix(context)
 
     def _divide(self, other, context):
@@ -1270,7 +1284,7 @@ class Decimal(object):
 
         expdiff = self.adjusted() - other.adjusted()
         if not self or other._isinfinity() or expdiff <= -2:
-            return (Decimal((sign, (0,), 0)),
+            return (_dec_from_triple(sign, '0', 0),
                     self._rescale(ideal_exp, context.rounding))
         if expdiff <= context.prec:
             op1 = _WorkRep(self)
@@ -1281,9 +1295,8 @@ class Decimal(object):
                 op2.int *= 10**(op2.exp - op1.exp)
             q, r = divmod(op1.int, op2.int)
             if q < 10**context.prec:
-                return (Decimal((sign, list(map(int, str(q))), 0)),
-                        Decimal((self._sign, list(map(int, str(r))),
-                                ideal_exp)))
+                return (_dec_from_triple(sign, str(q), 0),
+                        _dec_from_triple(self._sign, str(r), ideal_exp))
 
         # Here the quotient is too large to be representable
         ans = context._raise_error(DivisionImpossible,
@@ -1411,7 +1424,7 @@ class Decimal(object):
         # self = 0 -> remainder = self, with ideal exponent
         ideal_exponent = min(self._exp, other._exp)
         if not self:
-            ans = Decimal((self._sign, (0,), ideal_exponent))
+            ans = _dec_from_triple(self._sign, '0', ideal_exponent)
             return ans._fix(context)
 
         # catch most cases of large or small quotient
@@ -1448,7 +1461,7 @@ class Decimal(object):
             sign = 1-sign
             r = -r
 
-        ans = Decimal((sign, list(map(int, str(r))), ideal_exponent))
+        ans = _dec_from_triple(sign, str(r), ideal_exponent)
         return ans._fix(context)
 
     def __floordiv__(self, other, context=None):
@@ -1500,9 +1513,9 @@ class Decimal(object):
                 raise OverflowError("Cannot convert infinity to int")
         s = (-1)**self._sign
         if self._exp >= 0:
-            return s*int(''.join(map(str, self._int)))*10**self._exp
+            return s*int(self._int)*10**self._exp
         else:
-            return s*int(''.join(map(str, self._int))[:self._exp] or '0')
+            return s*int(self._int[:self._exp] or '0')
 
     def _fix_nan(self, context):
         """Decapitate the payload of a NaN to fit the context"""
@@ -1512,11 +1525,8 @@ class Decimal(object):
         # precision-1 if _clamp=1.
         max_payload_len = context.prec - context._clamp
         if len(payload) > max_payload_len:
-            pos = len(payload)-max_payload_len
-            while pos < len(payload) and payload[pos] == 0:
-                pos += 1
-            payload = payload[pos:]
-            return Decimal((self._sign, payload, self._exp))
+            payload = payload[len(payload)-max_payload_len:].lstrip('0')
+            return _dec_from_triple(self._sign, payload, self._exp, True)
         return Decimal(self)
 
     def _fix(self, context):
@@ -1549,7 +1559,7 @@ class Decimal(object):
             new_exp = min(max(self._exp, Etiny), exp_max)
             if new_exp != self._exp:
                 context._raise_error(Clamped)
-                return Decimal((self._sign, (0,), new_exp))
+                return _dec_from_triple(self._sign, '0', new_exp)
             else:
                 return Decimal(self)
 
@@ -1581,7 +1591,8 @@ class Decimal(object):
                     # we get here only if rescaling rounds the
                     # cofficient up to exactly 10**context.prec
                     if ans._exp < Etop:
-                        ans = Decimal((ans._sign, ans._int[:-1], ans._exp+1))
+                        ans = _dec_from_triple(ans._sign,
+                                                   ans._int[:-1], ans._exp+1)
                     else:
                         # Inexact and Rounded have already been raised
                         ans = context._raise_error(Overflow, 'above Emax',
@@ -1591,8 +1602,8 @@ class Decimal(object):
         # fold down if _clamp == 1 and self has too few digits
         if context._clamp == 1 and self._exp > Etop:
             context._raise_error(Clamped)
-            self_padded = self._int + (0,)*(self._exp - Etop)
-            return Decimal((self._sign, self_padded, Etop))
+            self_padded = self._int + '0'*(self._exp - Etop)
+            return _dec_from_triple(self._sign, self_padded, Etop)
 
         # here self was representable to begin with; return unchanged
         return Decimal(self)
@@ -1607,29 +1618,29 @@ class Decimal(object):
     def _round_down(self, prec):
         """Also known as round-towards-0, truncate."""
         newexp = self._exp + len(self._int) - prec
-        return Decimal((self._sign, self._int[:prec] or (0,), newexp))
+        return _dec_from_triple(self._sign, self._int[:prec] or '0', newexp)
 
     def _round_up(self, prec):
         """Rounds away from 0."""
         newexp = self._exp + len(self._int) - prec
-        tmp = Decimal((self._sign, self._int[:prec] or (0,), newexp))
+        tmp = _dec_from_triple(self._sign, self._int[:prec] or '0', newexp)
         for digit in self._int[prec:]:
-            if digit != 0:
+            if digit != '0':
                 return tmp._increment()
         return tmp
 
     def _round_half_up(self, prec):
         """Rounds 5 up (away from 0)"""
-        if self._int[prec] >= 5:
+        if self._int[prec] in '56789':
             return self._round_up(prec)
         else:
             return self._round_down(prec)
 
     def _round_half_down(self, prec):
         """Round 5 down"""
-        if self._int[prec] == 5:
+        if self._int[prec] == '5':
             for digit in self._int[prec+1:]:
-                if digit != 0:
+                if digit != '0':
                     break
             else:
                 return self._round_down(prec)
@@ -1637,7 +1648,7 @@ class Decimal(object):
 
     def _round_half_even(self, prec):
         """Round 5 to even, rest to nearest."""
-        if prec and self._int[prec-1] & 1:
+        if prec and self._int[prec-1] in '13579':
             return self._round_half_up(prec)
         else:
             return self._round_half_down(prec)
@@ -1658,7 +1669,7 @@ class Decimal(object):
 
     def _round_05up(self, prec):
         """Round down unless digit prec-1 is 0 or 5."""
-        if prec == 0 or self._int[prec-1] in (0, 5):
+        if prec == 0 or self._int[prec-1] in '05':
             return self._round_up(prec)
         else:
             return self._round_down(prec)
@@ -1776,7 +1787,7 @@ class Decimal(object):
             base = pow(base, 10, modulo)
         base = pow(base, exponent.int, modulo)
 
-        return Decimal((sign, list(map(int, str(base))), 0))
+        return _dec_from_triple(sign, str(base), 0)
 
     def _power_exact(self, other, p):
         """Attempt to compute self**other exactly.
@@ -1866,7 +1877,7 @@ class Decimal(object):
                 zeros = min(exponent-ideal_exponent, p-1)
             else:
                 zeros = 0
-            return Decimal((0, (1,) + (0,)*zeros, exponent-zeros))
+            return _dec_from_triple(0, '1' + '0'*zeros, exponent-zeros)
 
         # case where y is negative: xc must be either a power
         # of 2 or a power of 5.
@@ -1927,7 +1938,7 @@ class Decimal(object):
             if xc >= 10**p:
                 return None
             xe = -e-xe
-            return Decimal((0, list(map(int, str(xc))), xe))
+            return _dec_from_triple(0, str(xc), xe)
 
         # now y is positive; find m and n such that y = m/n
         if ye >= 0:
@@ -1989,7 +2000,7 @@ class Decimal(object):
             zeros = min(xe-ideal_exponent, p-len(str_xc))
         else:
             zeros = 0
-        return Decimal((0, list(map(int, str_xc))+[0,]*zeros, xe-zeros))
+        return _dec_from_triple(0, str_xc+'0'*zeros, xe-zeros)
 
     def __pow__(self, other, modulo=None, context=None):
         """Return self ** other [ % modulo].
@@ -2050,12 +2061,12 @@ class Decimal(object):
                     return context._raise_error(InvalidOperation,
                         'x ** y with x negative and y not an integer')
             # negate self, without doing any unwanted rounding
-            self = Decimal((0, self._int, self._exp))
+            self = self.copy_negate()
 
         # 0**(+ve or Inf)= 0; 0**(-ve or -Inf) = Infinity
         if not self:
             if other._sign == 0:
-                return Decimal((result_sign, (0,), 0))
+                return _dec_from_triple(result_sign, '0', 0)
             else:
                 return Infsign[result_sign]
 
@@ -2064,7 +2075,7 @@ class Decimal(object):
             if other._sign == 0:
                 return Infsign[result_sign]
             else:
-                return Decimal((result_sign, (0,), 0))
+                return _dec_from_triple(result_sign, '0', 0)
 
         # 1**other = 1, but the choice of exponent and the flags
         # depend on the exponent of self, and on whether other is a
@@ -2091,7 +2102,7 @@ class Decimal(object):
                 context._raise_error(Rounded)
                 exp = 1-context.prec
 
-            return Decimal((result_sign, (1,)+(0,)*-exp, exp))
+            return _dec_from_triple(result_sign, '1'+'0'*-exp, exp)
 
         # compute adjusted exponent of self
         self_adj = self.adjusted()
@@ -2100,7 +2111,7 @@ class Decimal(object):
         # self ** -infinity is infinity if self < 1, 0 if self > 1
         if other._isinfinity():
             if (other._sign == 0) == (self_adj < 0):
-                return Decimal((result_sign, (0,), 0))
+                return _dec_from_triple(result_sign, '0', 0)
             else:
                 return Infsign[result_sign]
 
@@ -2118,19 +2129,19 @@ class Decimal(object):
             # self > 1 and other +ve, or self < 1 and other -ve
             # possibility of overflow
             if bound >= len(str(context.Emax)):
-                ans = Decimal((result_sign, (1,), context.Emax+1))
+                ans = _dec_from_triple(result_sign, '1', context.Emax+1)
         else:
             # self > 1 and other -ve, or self < 1 and other +ve
             # possibility of underflow to 0
             Etiny = context.Etiny()
             if bound >= len(str(-Etiny)):
-                ans = Decimal((result_sign, (1,), Etiny-1))
+                ans = _dec_from_triple(result_sign, '1', Etiny-1)
 
         # try for an exact result with precision +1
         if ans is None:
             ans = self._power_exact(other, context.prec + 1)
             if ans is not None and result_sign == 1:
-                ans = Decimal((1, ans._int, ans._exp))
+                ans = _dec_from_triple(1, ans._int, ans._exp)
 
         # usual case: inexact result, x**y computed directly as exp(y*log(x))
         if ans is None:
@@ -2151,7 +2162,7 @@ class Decimal(object):
                     break
                 extra += 3
 
-            ans = Decimal((result_sign, list(map(int, str(coeff))), exp))
+            ans = _dec_from_triple(result_sign, str(coeff), exp)
 
         # the specification says that for non-integer other we need to
         # raise Inexact, even when the result is actually exact.  In
@@ -2163,7 +2174,8 @@ class Decimal(object):
             # pad with zeros up to length context.prec+1 if necessary
             if len(ans._int) <= context.prec:
                 expdiff = context.prec+1 - len(ans._int)
-                ans = Decimal((ans._sign, ans._int+(0,)*expdiff, ans._exp-expdiff))
+                ans = _dec_from_triple(ans._sign, ans._int+'0'*expdiff,
+                                       ans._exp-expdiff)
             if ans.adjusted() < context.Emin:
                 context._raise_error(Underflow)
 
@@ -2195,14 +2207,14 @@ class Decimal(object):
             return dup
 
         if not dup:
-            return Decimal( (dup._sign, (0,), 0) )
+            return _dec_from_triple(dup._sign, '0', 0)
         exp_max = [context.Emax, context.Etop()][context._clamp]
         end = len(dup._int)
         exp = dup._exp
-        while dup._int[end-1] == 0 and exp < exp_max:
+        while dup._int[end-1] == '0' and exp < exp_max:
             exp += 1
             end -= 1
-        return Decimal( (dup._sign, dup._int[:end], exp) )
+        return _dec_from_triple(dup._sign, dup._int[:end], exp)
 
     def quantize(self, exp, rounding=None, context=None, watchexp=True):
         """Quantize self so its exponent is the same as that of exp.
@@ -2243,7 +2255,7 @@ class Decimal(object):
                    'target exponent out of bounds in quantize')
 
         if not self:
-            ans = Decimal((self._sign, (0,), exp._exp))
+            ans = _dec_from_triple(self._sign, '0', exp._exp)
             return ans._fix(context)
 
         self_adjusted = self.adjusted()
@@ -2303,17 +2315,18 @@ class Decimal(object):
         if self._is_special:
             return Decimal(self)
         if not self:
-            return Decimal((self._sign, (0,), exp))
+            return _dec_from_triple(self._sign, '0', exp)
 
         if self._exp >= exp:
             # pad answer with zeros if necessary
-            return Decimal((self._sign, self._int + (0,)*(self._exp - exp), exp))
+            return _dec_from_triple(self._sign,
+                                        self._int + '0'*(self._exp - exp), exp)
 
         # too many digits; round and lose data.  If self.adjusted() <
         # exp-1, replace self by 10**(exp-1) before rounding
         digits = len(self._int) + self._exp - exp
         if digits < 0:
-            self = Decimal((self._sign, (1,), exp-1))
+            self = _dec_from_triple(self._sign, '1', exp-1)
             digits = 0
         this_function = getattr(self, self._pick_rounding_function[rounding])
         return this_function(digits)
@@ -2336,7 +2349,7 @@ class Decimal(object):
         if self._exp >= 0:
             return Decimal(self)
         if not self:
-            return Decimal((self._sign, (0,), 0))
+            return _dec_from_triple(self._sign, '0', 0)
         if context is None:
             context = getcontext()
         if rounding is None:
@@ -2378,7 +2391,7 @@ class Decimal(object):
 
         if not self:
             # exponent = self._exp // 2.  sqrt(-0) = -0
-            ans = Decimal((self._sign, (0,), self._exp // 2))
+            ans = _dec_from_triple(self._sign, '0', self._exp // 2)
             return ans._fix(context)
 
         if context is None:
@@ -2455,7 +2468,7 @@ class Decimal(object):
             if n % 5 == 0:
                 n += 1
 
-        ans = Decimal((0, list(map(int, str(n))), e))
+        ans = _dec_from_triple(0, str(n), e)
 
         # round, and fit to current context
         context = context._shallow_copy()
@@ -2552,13 +2565,13 @@ class Decimal(object):
         if self._exp >= 0:
             return True
         rest = self._int[self._exp:]
-        return rest == (0,)*len(rest)
+        return rest == '0'*len(rest)
 
     def _iseven(self):
         """Returns True if self is even.  Assumes self is an integer."""
         if not self or self._exp > 0:
             return True
-        return self._int[-1+self._exp] & 1 == 0
+        return self._int[-1+self._exp] in '02468'
 
     def adjusted(self):
         """Return the adjusted exponent of self"""
@@ -2680,18 +2693,19 @@ class Decimal(object):
 
     def copy_abs(self):
         """Returns a copy with the sign set to 0. """
-        return Decimal((0, self._int, self._exp))
+        return _dec_from_triple(0, self._int, self._exp, self._is_special)
 
     def copy_negate(self):
         """Returns a copy with the sign inverted."""
         if self._sign:
-            return Decimal((0, self._int, self._exp))
+            return _dec_from_triple(0, self._int, self._exp, self._is_special)
         else:
-            return Decimal((1, self._int, self._exp))
+            return _dec_from_triple(1, self._int, self._exp, self._is_special)
 
     def copy_sign(self, other):
         """Returns self with the sign of other."""
-        return Decimal((other._sign, self._int, self._exp))
+        return _dec_from_triple(other._sign, self._int,
+                                self._exp, self._is_special)
 
     def exp(self, context=None):
         """Returns e ** self."""
@@ -2730,16 +2744,16 @@ class Decimal(object):
         # larger exponent the result either overflows or underflows.
         if self._sign == 0 and adj > len(str((context.Emax+1)*3)):
             # overflow
-            ans = Decimal((0, (1,), context.Emax+1))
+            ans = _dec_from_triple(0, '1', context.Emax+1)
         elif self._sign == 1 and adj > len(str((-context.Etiny()+1)*3)):
             # underflow to 0
-            ans = Decimal((0, (1,), context.Etiny()-1))
+            ans = _dec_from_triple(0, '1', context.Etiny()-1)
         elif self._sign == 0 and adj < -p:
             # p+1 digits; final round will raise correct flags
-            ans = Decimal((0, (1,) + (0,)*(p-1) + (1,), -p))
+            ans = _dec_from_triple(0, '1' + '0'*(p-1) + '1', -p)
         elif self._sign == 1 and adj < -p-1:
             # p+1 digits; final round will raise correct flags
-            ans = Decimal((0, (9,)*(p+1), -p-1))
+            ans = _dec_from_triple(0, '9'*(p+1), -p-1)
         # general case
         else:
             op = _WorkRep(self)
@@ -2757,7 +2771,7 @@ class Decimal(object):
                     break
                 extra += 3
 
-            ans = Decimal((0, list(map(int, str(coeff))), exp))
+            ans = _dec_from_triple(0, str(coeff), exp)
 
         # at this stage, ans should round correctly with *any*
         # rounding mode, not just with ROUND_HALF_EVEN
@@ -2822,7 +2836,7 @@ class Decimal(object):
 
     def is_zero(self):
         """Return True if self is a zero; otherwise return False."""
-        return not self._is_special and self._int[0] == 0
+        return not self._is_special and self._int == '0'
 
     def _ln_exp_bound(self):
         """Compute a lower bound for the adjusted exponent of self.ln().
@@ -2891,7 +2905,7 @@ class Decimal(object):
             if coeff % (5*10**(len(str(abs(coeff)))-p-1)):
                 break
             places += 3
-        ans = Decimal((int(coeff<0), list(map(int, str(abs(coeff)))), -places))
+        ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places)
 
         context = context._shallow_copy()
         rounding = context._set_rounding(ROUND_HALF_EVEN)
@@ -2954,7 +2968,7 @@ class Decimal(object):
                                         'log10 of a negative value')
 
         # log10(10**n) = n
-        if self._int[0] == 1 and self._int[1:] == (0,)*(len(self._int) - 1):
+        if self._int[0] == '1' and self._int[1:] == '0'*(len(self._int) - 1):
             # answer may need rounding
             ans = Decimal(self._exp + len(self._int) - 1)
         else:
@@ -2972,8 +2986,7 @@ class Decimal(object):
                 if coeff % (5*10**(len(str(abs(coeff)))-p-1)):
                     break
                 places += 3
-            ans = Decimal((int(coeff<0), list(map(int, str(abs(coeff)))),
-                          -places))
+            ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places)
 
         context = context._shallow_copy()
         rounding = context._set_rounding(ROUND_HALF_EVEN)
@@ -3020,19 +3033,19 @@ class Decimal(object):
         if self._sign != 0 or self._exp != 0:
             return False
         for dig in self._int:
-            if dig not in (0, 1):
+            if dig not in '01':
                 return False
         return True
 
     def _fill_logical(self, context, opa, opb):
         dif = context.prec - len(opa)
         if dif > 0:
-            opa = (0,)*dif + opa
+            opa = '0'*dif + opa
         elif dif < 0:
             opa = opa[-context.prec:]
         dif = context.prec - len(opb)
         if dif > 0:
-            opb = (0,)*dif + opb
+            opb = '0'*dif + opb
         elif dif < 0:
             opb = opb[-context.prec:]
         return opa, opb
@@ -3048,22 +3061,15 @@ class Decimal(object):
         (opa, opb) = self._fill_logical(context, self._int, other._int)
 
         # make the operation, and clean starting zeroes
-        result = [a&b for a,b in zip(opa,opb)]
-        for i,d in enumerate(result):
-            if d == 1:
-                break
-        result = tuple(result[i:])
-
-        # if empty, we must have at least a zero
-        if not result:
-            result = (0,)
-        return Decimal((0, result, 0))
+        result = "".join([str(int(a)&int(b)) for a,b in zip(opa,opb)])
+        return _dec_from_triple(0, result.lstrip('0') or '0', 0)
 
     def logical_invert(self, context=None):
         """Invert all its digits."""
         if context is None:
             context = getcontext()
-        return self.logical_xor(Decimal((0,(1,)*context.prec,0)), context)
+        return self.logical_xor(_dec_from_triple(0,'1'*context.prec,0),
+                                context)
 
     def logical_or(self, other, context=None):
         """Applies an 'or' operation between self and other's digits."""
@@ -3076,16 +3082,8 @@ class Decimal(object):
         (opa, opb) = self._fill_logical(context, self._int, other._int)
 
         # make the operation, and clean starting zeroes
-        result = [a|b for a,b in zip(opa,opb)]
-        for i,d in enumerate(result):
-            if d == 1:
-                break
-        result = tuple(result[i:])
-
-        # if empty, we must have at least a zero
-        if not result:
-            result = (0,)
-        return Decimal((0, result, 0))
+        result = "".join(str(int(a)|int(b)) for a,b in zip(opa,opb))
+        return _dec_from_triple(0, result.lstrip('0') or '0', 0)
 
     def logical_xor(self, other, context=None):
         """Applies an 'xor' operation between self and other's digits."""
@@ -3098,16 +3096,8 @@ class Decimal(object):
         (opa, opb) = self._fill_logical(context, self._int, other._int)
 
         # make the operation, and clean starting zeroes
-        result = [a^b for a,b in zip(opa,opb)]
-        for i,d in enumerate(result):
-            if d == 1:
-                break
-        result = tuple(result[i:])
-
-        # if empty, we must have at least a zero
-        if not result:
-            result = (0,)
-        return Decimal((0, result, 0))
+        result = "".join(str(int(a)^int(b)) for a,b in zip(opa,opb))
+        return _dec_from_triple(0, result.lstrip('0') or '0', 0)
 
     def max_mag(self, other, context=None):
         """Compares the values numerically with their sign ignored."""
@@ -3185,7 +3175,7 @@ class Decimal(object):
         if self._isinfinity() == -1:
             return negInf
         if self._isinfinity() == 1:
-            return Decimal((0, (9,)*context.prec, context.Etop()))
+            return _dec_from_triple(0, '9'*context.prec, context.Etop())
 
         context = context.copy()
         context._set_rounding(ROUND_FLOOR)
@@ -3193,7 +3183,8 @@ class Decimal(object):
         new_self = self._fix(context)
         if new_self != self:
             return new_self
-        return self.__sub__(Decimal((0, (1,), context.Etiny()-1)), context)
+        return self.__sub__(_dec_from_triple(0, '1', context.Etiny()-1),
+                            context)
 
     def next_plus(self, context=None):
         """Returns the smallest representable number larger than itself."""
@@ -3207,7 +3198,7 @@ class Decimal(object):
         if self._isinfinity() == 1:
             return Inf
         if self._isinfinity() == -1:
-            return Decimal((1, (9,)*context.prec, context.Etop()))
+            return _dec_from_triple(1, '9'*context.prec, context.Etop())
 
         context = context.copy()
         context._set_rounding(ROUND_CEILING)
@@ -3215,7 +3206,8 @@ class Decimal(object):
         new_self = self._fix(context)
         if new_self != self:
             return new_self
-        return self.__add__(Decimal((0, (1,), context.Etiny()-1)), context)
+        return self.__add__(_dec_from_triple(0, '1', context.Etiny()-1),
+                            context)
 
     def next_toward(self, other, context=None):
         """Returns the number closest to self, in the direction towards other.
@@ -3237,7 +3229,7 @@ class Decimal(object):
 
         comparison = self.__cmp__(other)
         if comparison == 0:
-            return Decimal((other._sign, self._int, self._exp))
+            return self.copy_sign(other)
 
         if comparison == -1:
             ans = self.next_plus(context)
@@ -3331,19 +3323,12 @@ class Decimal(object):
         rotdig = self._int
         topad = context.prec - len(rotdig)
         if topad:
-            rotdig = ((0,)*topad) + rotdig
+            rotdig = '0'*topad + rotdig
 
         # let's rotate!
         rotated = rotdig[torot:] + rotdig[:torot]
-
-        # clean starting zeroes
-        for i,d in enumerate(rotated):
-            if d != 0:
-                break
-        rotated = rotated[i:]
-
-        return Decimal((self._sign, rotated, self._exp))
-
+        return _dec_from_triple(self._sign,
+                                rotated.lstrip('0') or '0', self._exp)
 
     def scaleb (self, other, context=None):
         """Returns self operand after adding the second value to its exp."""
@@ -3364,7 +3349,7 @@ class Decimal(object):
         if self._isinfinity():
             return Decimal(self)
 
-        d = Decimal((self._sign, self._int, self._exp + int(other)))
+        d = _dec_from_triple(self._sign, self._int, self._exp + int(other))
         d = d._fix(context)
         return d
 
@@ -3392,26 +3377,17 @@ class Decimal(object):
         rotdig = self._int
         topad = context.prec - len(rotdig)
         if topad:
-            rotdig = ((0,)*topad) + rotdig
+            rotdig = '0'*topad + rotdig
 
         # let's shift!
         if torot < 0:
             rotated = rotdig[:torot]
         else:
-            rotated = (rotdig + ((0,) * torot))
+            rotated = rotdig + '0'*torot
             rotated = rotated[-context.prec:]
 
-        # clean starting zeroes
-        if rotated:
-            for i,d in enumerate(rotated):
-                if d != 0:
-                    break
-            rotated = rotated[i:]
-        else:
-            rotated = (0,)
-
-        return Decimal((self._sign, rotated, self._exp))
-
+        return _dec_from_triple(self._sign,
+                                    rotated.lstrip('0') or '0', self._exp)
 
     # Support for pickling, copy, and deepcopy
     def __reduce__(self):
@@ -3427,6 +3403,22 @@ class Decimal(object):
             return self     # My components are also immutable
         return self.__class__(str(self))
 
+def _dec_from_triple(sign, coefficient, exponent, special=False):
+    """Create a decimal instance directly, without any validation,
+    normalization (e.g. removal of leading zeros) or argument
+    conversion.
+
+    This function is for *internal use only*.
+    """
+
+    self = object.__new__(Decimal)
+    self._sign = sign
+    self._int = coefficient
+    self._exp = exponent
+    self._is_special = special
+
+    return self
+
 ##### Context class #######################################################
 
 
@@ -4775,10 +4767,7 @@ class _WorkRep(object):
             self.exp = None
         elif isinstance(value, Decimal):
             self.sign = value._sign
-            cum = 0
-            for digit  in value._int:
-                cum = cum * 10 + digit
-            self.int = cum
+            self.int = int(value._int)
             self.exp = value._exp
         else:
             # assert isinstance(value, tuple)
@@ -5175,53 +5164,6 @@ def _convert_other(other, raiseit=False):
         raise TypeError("Unable to convert %s to Decimal" % other)
     return NotImplemented
 
-_infinity_map = {
-    'inf' : 1,
-    'infinity' : 1,
-    '+inf' : 1,
-    '+infinity' : 1,
-    '-inf' : -1,
-    '-infinity' : -1
-}
-
-def _isinfinity(num):
-    """Determines whether a string or float is infinity.
-
-    +1 for negative infinity; 0 for finite ; +1 for positive infinity
-    """
-    num = str(num).lower()
-    return _infinity_map.get(num, 0)
-
-def _isnan(num):
-    """Determines whether a string or float is NaN
-
-    (1, sign, diagnostic info as string) => NaN
-    (2, sign, diagnostic info as string) => sNaN
-    0 => not a NaN
-    """
-    num = str(num).lower()
-    if not num:
-        return 0
-
-    # Get the sign, get rid of trailing [+-]
-    sign = 0
-    if num[0] == '+':
-        num = num[1:]
-    elif num[0] == '-':  # elif avoids '+-nan'
-        num = num[1:]
-        sign = 1
-
-    if num.startswith('nan'):
-        if len(num) > 3 and not num[3:].isdigit():  # diagnostic info
-            return 0
-        return (1, sign, num[3:].lstrip('0'))
-    if num.startswith('snan'):
-        if len(num) > 4 and not num[4:].isdigit():
-            return 0
-        return (2, sign, num[4:].lstrip('0'))
-    return 0
-
-
 ##### Setup Specific Contexts ############################################
 
 # The default context prototype used by Context()
@@ -5255,91 +5197,62 @@ ExtendedContext = Context(
 )
 
 
-##### Useful Constants (internal use only) ################################
-
-# Reusable defaults
-Inf = Decimal('Inf')
-negInf = Decimal('-Inf')
-NaN = Decimal('NaN')
-Dec_0 = Decimal(0)
-Dec_p1 = Decimal(1)
-Dec_n1 = Decimal(-1)
-Dec_p2 = Decimal(2)
-Dec_n2 = Decimal(-2)
-
-# Infsign[sign] is infinity w/ that sign
-Infsign = (Inf, negInf)
-
-
 ##### crud for parsing strings #############################################
 import re
 
-# There's an optional sign at the start, and an optional exponent
-# at the end.  The exponent has an optional sign and at least one
-# digit.  In between, must have either at least one digit followed
-# by an optional fraction, or a decimal point followed by at least
-# one digit.  Yuck.
+# Regular expression used for parsing numeric strings.  Additional
+# comments:
+#
+# 1. Uncomment the two '\s*' lines to allow leading and/or trailing
+# whitespace.  But note that the specification disallows whitespace in
+# a numeric string.
+#
+# 2. For finite numbers (not infinities and NaNs) the body of the
+# number between the optional sign and the optional exponent must have
+# at least one decimal digit, possibly after the decimal point.  The
+# lookahead expression '(?=\d|\.\d)' checks this.
+#
+# As the flag UNICODE is not enabled here, we're explicitly avoiding any
+# other meaning for \d than the numbers [0-9].
 
-_parser = re.compile(r"""
+import re
+_parser = re.compile(r"""     # A numeric string consists of:
 #    \s*
-    (?P<sign>[-+])?
+    (?P<sign>[-+])?           # an optional sign, followed by either...
     (
-        (?P<int>\d+) (\. (?P<frac>\d*))?
+        (?=\d|\.\d)           # ...a number (with at least one digit)
+        (?P<int>\d*)          # consisting of a (possibly empty) integer part
+        (\.(?P<frac>\d*))?    # followed by an optional fractional part
+        (E(?P<exp>[-+]?\d+))? # followed by an optional exponent, or...
     |
-        \. (?P<onlyfrac>\d+)
+        Inf(inity)?           # ...an infinity, or...
+    |
+        (?P<signal>s)?        # ...an (optionally signaling)
+        NaN                   # NaN
+        (?P<diag>\d*)         # with (possibly empty) diagnostic information.
     )
-    ([eE](?P<exp>[-+]? \d+))?
 #    \s*
     $
-""", re.VERBOSE).match  # Uncomment the \s* to allow leading or trailing spaces.
+""", re.VERBOSE | re.IGNORECASE).match
 
 del re
 
-def _string2exact(s):
-    """Return sign, n, p s.t.
 
-    Float string value == -1**sign * n * 10**p exactly
-    """
-    m = _parser(s)
-    if m is None:
-        raise ValueError("invalid literal for Decimal: %r" % s)
+##### Useful Constants (internal use only) ################################
 
-    if m.group('sign') == "-":
-        sign = 1
-    else:
-        sign = 0
+# Reusable defaults
+Inf = Decimal('Inf')
+negInf = Decimal('-Inf')
+NaN = Decimal('NaN')
+Dec_0 = Decimal(0)
+Dec_p1 = Decimal(1)
+Dec_n1 = Decimal(-1)
+Dec_p2 = Decimal(2)
+Dec_n2 = Decimal(-2)
 
-    exp = m.group('exp')
-    if exp is None:
-        exp = 0
-    else:
-        exp = int(exp)
+# Infsign[sign] is infinity w/ that sign
+Infsign = (Inf, negInf)
 
-    intpart = m.group('int')
-    if intpart is None:
-        intpart = ""
-        fracpart = m.group('onlyfrac')
-    else:
-        fracpart = m.group('frac')
-        if fracpart is None:
-            fracpart = ""
-
-    exp -= len(fracpart)
-
-    mantissa = intpart + fracpart
-    tmp = list(map(int, mantissa))
-    backup = tmp
-    while tmp and tmp[0] == 0:
-        del tmp[0]
-
-    # It's a zero
-    if not tmp:
-        if backup:
-            return (sign, tuple(backup), exp)
-        return (sign, (0,), exp)
-    mantissa = tuple(tmp)
-
-    return (sign, mantissa, exp)
 
 
 if __name__ == '__main__':
index eee2f519dbc8176cc7603c1d467ada4801b75ce0..5b1807301af6a05e3b8730a1a18b21aa66731b6d 100644 (file)
@@ -315,8 +315,21 @@ class _OutputRedirectingPdb(pdb.Pdb):
     """
     def __init__(self, out):
         self.__out = out
+        self.__debugger_used = False
         pdb.Pdb.__init__(self, stdout=out)
 
+    def set_trace(self, frame=None):
+        self.__debugger_used = True
+        if frame is None:
+            frame = sys._getframe().f_back
+        pdb.Pdb.set_trace(self, frame)
+
+    def set_continue(self):
+        # Calling set_continue unconditionally would break unit test
+        # coverage reporting, as Bdb.set_continue calls sys.settrace(None).
+        if self.__debugger_used:
+            pdb.Pdb.set_continue(self)
+
     def trace_dispatch(self, *args):
         # Redirect stdout to the given stream.
         save_stdout = sys.stdout
index ed4c46e7d8c7a0e3c869e56e0ba79daa071e2903..39f2dca5a142b6216be372b981c2d352b0e9cc32 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- This set of tests primarily tests the existence of the operator.
 -- Additon, subtraction, rounding, and more overflows are tested
index 3460aa4cd2510caea628162ef8cf011fa8f3a239..8db222a1b95efbe89ccf95977e8fa8709318af8e 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 precision:   9
 rounding:    half_up
@@ -1122,6 +1122,15 @@ addx1116 add -1e-3 +1e-383   -> -0.0009999999999999999  Rounded Inexact
 addx1117 add -1e-4 +1e-383   -> -0.00009999999999999999  Rounded Inexact
 addx1118 add -1e-5 +1e-383   -> -0.000009999999999999999  Rounded Inexact
 addx1119 add -1e-6 +1e-383   -> -9.999999999999999E-7  Rounded Inexact
+addx1120 add +1e-383 -1e+2   -> -99.99999999999999 Rounded Inexact
+addx1121 add +1e-383 -1e+1   -> -9.999999999999999  Rounded Inexact
+addx1123 add +1e-383    -1   -> -0.9999999999999999  Rounded Inexact
+addx1124 add +1e-383 -1e-1   -> -0.09999999999999999  Rounded Inexact
+addx1125 add +1e-383 -1e-2   -> -0.009999999999999999  Rounded Inexact
+addx1126 add +1e-383 -1e-3   -> -0.0009999999999999999  Rounded Inexact
+addx1127 add +1e-383 -1e-4   -> -0.00009999999999999999  Rounded Inexact
+addx1128 add +1e-383 -1e-5   -> -0.000009999999999999999  Rounded Inexact
+addx1129 add +1e-383 -1e-6   -> -9.999999999999999E-7  Rounded Inexact
 
 rounding:     down
 precision:    7
@@ -1658,17 +1667,19 @@ addx6056 add '1.3' '-2.07' -> '-0.77'
 addx6057 add '1E+2' '1E+4' -> '1.01E+4'
 
 -- from above
-addx6061 add 1 '0.1' -> '1.1'
-addx6062 add 1 '0.01' -> '1.01'
-addx6063 add 1 '0.001' -> '1.001'
-addx6064 add 1 '0.0001' -> '1.0001'
-addx6065 add 1 '0.00001' -> '1.00001'
-addx6066 add 1 '0.000001' -> '1.000001'
-addx6067 add 1 '0.0000001' -> '1.0000001'
-addx6068 add 1 '0.00000001' -> '1.00000001'
+addx6060 add 1 '0.1' -> '1.1'
+addx6061 add 1 '0.01' -> '1.01'
+addx6062 add 1 '0.001' -> '1.001'
+addx6063 add 1 '0.0001' -> '1.0001'
+addx6064 add 1 '0.00001' -> '1.00001'
+addx6065 add 1 '0.000001' -> '1.000001'
+addx6066 add 1 '0.0000001' -> '1.0000001'
+addx6067 add 1 '0.00000001' -> '1.00000001'
 
 -- cancellation to integer
-addx6069 add 99999999999999123456789 -99999999999999E+9 -> 123456789
+addx6068 add 99999999999999123456789 -99999999999999E+9 -> 123456789
+-- similar from FMA fun
+addx6069 add "-1234567890123455.234567890123454" "1234567890123456" -> 0.765432109876546
 
 -- some funny zeros [in case of bad signum]
 addx6070 add 1  0    -> 1
index 18ba8817cf86907a7865086e169cd71a8036f8b9..90490a51ebe7ead82cca1cc010acad60897da44d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index de0b8138bce4c0f6aee03663a169516d2d3f4177..58ce91c4b5ac072eae52d678e7048f5f445f9881 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 extended:    1
 
 -- This file tests base conversions from string to a decimal number
index eca0cfb27767267a3f133d1eb076d10975eafab2..48e27c0ce760d1d611cb6b98821c202fa079b930 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- This set of tests uses the same limits as the 8-byte concrete
 -- representation, but applies clamping without using format-specific
index 77a22e3a59890e10032f750545327f61d7022381..61ad548a10eb31dab8dade3a502f2620e00f6896 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- [New 2006.11.27]\r
 \r
index 2d5e664076d5978377f2e8265cec75f99b4eeb79..979cc52264c1c59fc3de501641cc1853cc862b4d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- Note that we cannot assume add/subtract tests cover paths adequately,
 -- here, because the code might be quite different (comparison cannot
index 737293f9c1481524f96f8c8e9c3775e84bccf465..ef2914fcc0c78843495101496953fd0580b438d8 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index a12e614cea6b311dfbdf3f734191437caeb66be3..4a51d7fc34a5451b4d2ea50818c27d42cb2192c9 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that it cannot be assumed that add/subtract tests cover paths\r
 -- for this operation adequately, here, because the code might be\r
index 5d4065d961800c0d85fc689f5125c3527af1e144..e6edac5fd6e2e88f0d76bf2c025baadf30d00bf0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 7457552c8bbb7ac9f02c3ef64a3366e689035f20..447988887c745c916382b1ceea890cd934ee675b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 3e502be4c1b908388167003c4530308537bb9b4d..7cf124c4d570b40817fc36a9e670803b0e973e67 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 6b20fda580b3280e27cef3c073c08b97337f4f5c..ed6089363b76309ed4942e1b0c7a23c624214901 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 4da662c8f1ece311f870c5af30348c88256249a8..58b7902295c74451139f78a1859ae929d7a24da0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 49d89d4e63a4f4a72c6f884003ea1f930fec2693..38d511b01a366de277a4054cc54beb7dd3e4d17e 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decDoubles only; all arguments are\r
 -- representable in a decDouble\r
@@ -1029,6 +1029,16 @@ ddadd71706 add 130E-2   -12E-1  -> 0.10
 ddadd71707 add 130E-2   -1E0    -> 0.30\r
 ddadd71708 add 1E2      -1E4    -> -9.9E+3\r
 \r
+-- query from Vincent Kulandaisamy\r
+rounding: ceiling\r
+ddadd71801  add  7.8822773805862E+277    -5.1757503820663E-21 -> 7.882277380586200E+277 Inexact Rounded\r
+ddadd71802  add  7.882277380586200E+277  12.341               -> 7.882277380586201E+277 Inexact Rounded\r
+ddadd71803  add  7.882277380586201E+277  2.7270545046613E-31  -> 7.882277380586202E+277 Inexact Rounded\r
+\r
+ddadd71811  add                   12.341 -5.1757503820663E-21 -> 12.34100000000000      Inexact Rounded\r
+ddadd71812  add        12.34100000000000 2.7270545046613E-31  -> 12.34100000000001      Inexact Rounded\r
+ddadd71813  add        12.34100000000001 7.8822773805862E+277 -> 7.882277380586201E+277 Inexact Rounded\r
+\r
 -- Gappy coefficients; check residue handling even with full coefficient gap\r
 rounding: half_even\r
 \r
index e5fa38d13ed5996e292dec98eaceeafa5ae9349b..850da17ea2bbaf46b0ad83b925c374524e6bc8f5 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 431bce1f85aa09e085f7092b6b46900979b9a028..ddc8185685a6069209997df04f16e4e62d6e42fb 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This file tests base conversions from string to a decimal number\r
 -- and back to a string (in Scientific form)\r
index 308b9ffab7f4b083997e3118e2ce948417271f70..4d659b04814108dab3a7cb43c7c82563b5403bf3 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This file tests that copy operations leave uncanonical operands\r
 -- unchanged, and vice versa\r
index 0b1d1f39fe3f8ca77ab2a92618f0a9ffaf096d37..8a38f4a3f4f60e0dc29017080330a096dc5b846e 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- [New 2006.11.27]\r
 precision:   16\r
index b225d0db822b670c01c5a96fbad71b42ef13ad72..5f6fba52360e1e25a0bbad74c0b3658c206b7539 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index 388a656e93cba65d3906bb722f6fa65a4a634095..b4895daa081c1b96ec42c5f62c925d997f37dfc1 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index a8bf477e567e9d78773eaceebcf240c9272229ef..b86b8dfa300920c7bb964eecef0a96f6e0608d93 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index b19cf6428cdc3a1d3ff6abd104cfbb76d9013645..e93a7496bcb6e7dc19c9db23b7ef91ea02da4845 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index 49c68240bce149d60b4b81e31bc4429f27e62688..9d82db71c0e32064aa716b574f46258b8b9ed79f 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index b65f063e091e4456790bb64c6f5fc3f052cae058..c60cc380f335bade9a70f280a59c4fad2c66c308 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index b111c9b285d89357908859b40077c7b7e46eda25..c2c60985a7ea4ed92c1cd68b02de1c7e1a4e4292 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 7c834163ff8d2b3d251308acf17a4d187a90647d..36b060e120bd32c89a5ae0f270c903851c5abb92 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 1a953f741316f1445e2c75233e96502111fb43db..90698941bbf53e56933d8ee5514f3e3676112245 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 782fe8d12f195c5259cae0f4e390a5eb1e5cc43f..71168415a250c9cee7733665d46cc94004da8430 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 16264fc98da9e9852ae2fb6adbde1633d71dd499..3fa434c55f41441d4ef9cae43840146762e367b0 100644 (file)
@@ -18,7 +18,7 @@
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
 -- [Previously called decimal64.decTest]\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests is for the eight-byte concrete representation.\r
 -- Its characteristics are:\r
@@ -485,3 +485,6 @@ decd828 apply  #2238000115afb55a ->  4294967294
 decd829 apply  #2238000115afb55b ->  4294967295\r
 decd830 apply  #2238000115afb57a ->  4294967296\r
 decd831 apply  #2238000115afb57b ->  4294967297\r
+\r
+-- for narrowing\r
+decd840 apply  #2870000000000000 ->  2.000000000000000E-99\r
index 946d68011063c140e29f1c24f1aff39ba79aabb7..bc44b6abe6cfc3d742b69851cf2112dc0546b520 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
@@ -1663,6 +1663,34 @@ ddfma375087 fma  1  12345678 1E-33                   -> 12345678.00000001 Inexac
 ddfma375088 fma  1  12345678 1E-34                   -> 12345678.00000001 Inexact Rounded\r
 ddfma375089 fma  1  12345678 1E-35                   -> 12345678.00000001 Inexact Rounded\r
 \r
+-- desctructive subtraction (from remainder tests)\r
+\r
+-- +++ some of these will be off-by-one remainder vs remainderNear\r
+\r
+ddfma4000  fma  -1234567890123454   1.000000000000001    1234567890123456  ->  0.765432109876546\r
+ddfma4001  fma  -1234567890123443    1.00000000000001    1234567890123456  ->  0.65432109876557\r
+ddfma4002  fma  -1234567890123332     1.0000000000001    1234567890123456  ->  0.5432109876668\r
+ddfma4003  fma   -308641972530863   4.000000000000001    1234567890123455  ->  2.691358027469137\r
+ddfma4004  fma   -308641972530863   4.000000000000001    1234567890123456  ->  3.691358027469137\r
+ddfma4005  fma   -246913578024696     4.9999999999999    1234567890123456  ->  0.6913578024696\r
+ddfma4006  fma   -246913578024691    4.99999999999999    1234567890123456  ->  3.46913578024691\r
+ddfma4007  fma   -246913578024691   4.999999999999999    1234567890123456  ->  1.246913578024691\r
+ddfma4008  fma   -246913578024691   5.000000000000001    1234567890123456  ->  0.753086421975309\r
+ddfma4009  fma   -246913578024690    5.00000000000001    1234567890123456  ->  3.53086421975310\r
+ddfma4010  fma   -246913578024686     5.0000000000001    1234567890123456  ->  1.3086421975314\r
+ddfma4011  fma  -1234567890123455   1.000000000000001    1234567890123456  ->  -0.234567890123455\r
+ddfma4012  fma  -1234567890123444    1.00000000000001    1234567890123456  ->  -0.34567890123444\r
+ddfma4013  fma  -1234567890123333     1.0000000000001    1234567890123456  ->  -0.4567890123333\r
+ddfma4014  fma   -308641972530864   4.000000000000001    1234567890123455  ->  -1.308641972530864\r
+ddfma4015  fma   -308641972530864   4.000000000000001    1234567890123456  ->  -0.308641972530864\r
+ddfma4016  fma   -246913578024696     4.9999999999999    1234567890123456  ->  0.6913578024696\r
+ddfma4017  fma   -246913578024692    4.99999999999999    1234567890123456  ->  -1.53086421975308\r
+ddfma4018  fma   -246913578024691   4.999999999999999    1234567890123456  ->  1.246913578024691\r
+ddfma4019  fma   -246913578024691   5.000000000000001    1234567890123456  ->  0.753086421975309\r
+ddfma4020  fma   -246913578024691    5.00000000000001    1234567890123456  ->  -1.46913578024691\r
+ddfma4021  fma   -246913578024686     5.0000000000001    1234567890123456  ->  1.3086421975314\r
+\r
+\r
 -- Null tests\r
 ddfma39990 fma  1  10  # -> NaN Invalid_operation\r
 ddfma39991 fma  1   # 10 -> NaN Invalid_operation\r
index 2697f59f13c89674e05591da080faf98d3970b5c..b4ae74468d501329e8e5179813eff4bd70ed42d6 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index f18fd5ef17cea912661f31f7126b5c6e31807517..99a38434fd2db577f2c6a64f8fecd2c7862b16b0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 5fe600fcece14602bb8b4a24a2377b1b3f589431..515f79a5b038d943f018b7c17641d45f6b898efc 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index dbabc990e068679fb4fc1525d15ef0e3bc974783..c43c4604a8e2e397751e8da751972052c55079e8 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 4ba27f71fb3fae48138bb1ea804d5a6bb2c68b79..c77a71e208918816e9a78ad88b8839c5621c9966 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index cc5ccec099770693d9f7822ab0eb2f4cd33616ab..9291abce2332b4f2a994082736389705ec614d83 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 9fe196b828d9c612f8aacc1588d6fab5c8e5f560..07dfa7abfae2c80a8ee1a6c3e1aa490dade34cac 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 01e0ffef3a7784ffa7385ad4092fe33d42a05990..f506ea25d4e4a4db8f9782fc88893337d5489d2a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decDoubles only; all arguments are\r
 -- representable in a decDouble\r
@@ -454,9 +454,92 @@ ddmul908 multiply  9.999999999999999E-383  0.09999999999999999     -> 1.00000000
 -- hugest\r
 ddmul909 multiply  9999999999999999 9999999999999999 -> 9.999999999999998E+31 Inexact Rounded\r
 \r
+-- power-of-ten edge cases\r
+ddmul1001 multiply  1      10               -> 10\r
+ddmul1002 multiply  1      100              -> 100\r
+ddmul1003 multiply  1      1000             -> 1000\r
+ddmul1004 multiply  1      10000            -> 10000\r
+ddmul1005 multiply  1      100000           -> 100000\r
+ddmul1006 multiply  1      1000000          -> 1000000\r
+ddmul1007 multiply  1      10000000         -> 10000000\r
+ddmul1008 multiply  1      100000000        -> 100000000\r
+ddmul1009 multiply  1      1000000000       -> 1000000000\r
+ddmul1010 multiply  1      10000000000      -> 10000000000\r
+ddmul1011 multiply  1      100000000000     -> 100000000000\r
+ddmul1012 multiply  1      1000000000000    -> 1000000000000\r
+ddmul1013 multiply  1      10000000000000   -> 10000000000000\r
+ddmul1014 multiply  1      100000000000000  -> 100000000000000\r
+ddmul1015 multiply  1      1000000000000000 -> 1000000000000000\r
+ddmul1021 multiply  10     1                -> 10\r
+ddmul1022 multiply  10     10               -> 100\r
+ddmul1023 multiply  10     100              -> 1000\r
+ddmul1024 multiply  10     1000             -> 10000\r
+ddmul1025 multiply  10     10000            -> 100000\r
+ddmul1026 multiply  10     100000           -> 1000000\r
+ddmul1027 multiply  10     1000000          -> 10000000\r
+ddmul1028 multiply  10     10000000         -> 100000000\r
+ddmul1029 multiply  10     100000000        -> 1000000000\r
+ddmul1030 multiply  10     1000000000       -> 10000000000\r
+ddmul1031 multiply  10     10000000000      -> 100000000000\r
+ddmul1032 multiply  10     100000000000     -> 1000000000000\r
+ddmul1033 multiply  10     1000000000000    -> 10000000000000\r
+ddmul1034 multiply  10     10000000000000   -> 100000000000000\r
+ddmul1035 multiply  10     100000000000000  -> 1000000000000000\r
+ddmul1041 multiply  100    0.1              -> 10.0\r
+ddmul1042 multiply  100    1                -> 100\r
+ddmul1043 multiply  100    10               -> 1000\r
+ddmul1044 multiply  100    100              -> 10000\r
+ddmul1045 multiply  100    1000             -> 100000\r
+ddmul1046 multiply  100    10000            -> 1000000\r
+ddmul1047 multiply  100    100000           -> 10000000\r
+ddmul1048 multiply  100    1000000          -> 100000000\r
+ddmul1049 multiply  100    10000000         -> 1000000000\r
+ddmul1050 multiply  100    100000000        -> 10000000000\r
+ddmul1051 multiply  100    1000000000       -> 100000000000\r
+ddmul1052 multiply  100    10000000000      -> 1000000000000\r
+ddmul1053 multiply  100    100000000000     -> 10000000000000\r
+ddmul1054 multiply  100    1000000000000    -> 100000000000000\r
+ddmul1055 multiply  100    10000000000000   -> 1000000000000000\r
+ddmul1061 multiply  1000   0.01             -> 10.00\r
+ddmul1062 multiply  1000   0.1              -> 100.0\r
+ddmul1063 multiply  1000   1                -> 1000\r
+ddmul1064 multiply  1000   10               -> 10000\r
+ddmul1065 multiply  1000   100              -> 100000\r
+ddmul1066 multiply  1000   1000             -> 1000000\r
+ddmul1067 multiply  1000   10000            -> 10000000\r
+ddmul1068 multiply  1000   100000           -> 100000000\r
+ddmul1069 multiply  1000   1000000          -> 1000000000\r
+ddmul1070 multiply  1000   10000000         -> 10000000000\r
+ddmul1071 multiply  1000   100000000        -> 100000000000\r
+ddmul1072 multiply  1000   1000000000       -> 1000000000000\r
+ddmul1073 multiply  1000   10000000000      -> 10000000000000\r
+ddmul1074 multiply  1000   100000000000     -> 100000000000000\r
+ddmul1075 multiply  1000   1000000000000    -> 1000000000000000\r
+ddmul1081 multiply  10000  0.001            -> 10.000\r
+ddmul1082 multiply  10000  0.01             -> 100.00\r
+ddmul1083 multiply  10000  0.1              -> 1000.0\r
+ddmul1084 multiply  10000  1                -> 10000\r
+ddmul1085 multiply  10000  10               -> 100000\r
+ddmul1086 multiply  10000  100              -> 1000000\r
+ddmul1087 multiply  10000  1000             -> 10000000\r
+ddmul1088 multiply  10000  10000            -> 100000000\r
+ddmul1089 multiply  10000  100000           -> 1000000000\r
+ddmul1090 multiply  10000  1000000          -> 10000000000\r
+ddmul1091 multiply  10000  10000000         -> 100000000000\r
+ddmul1092 multiply  10000  100000000        -> 1000000000000\r
+ddmul1093 multiply  10000  1000000000       -> 10000000000000\r
+ddmul1094 multiply  10000  10000000000      -> 100000000000000\r
+ddmul1095 multiply  10000  100000000000     -> 1000000000000000\r
+\r
+ddmul1097 multiply  10000   99999999999     ->  999999999990000\r
+ddmul1098 multiply  10000   99999999999     ->  999999999990000\r
+\r
+\r
+\r
+\r
 -- Null tests\r
-ddmul990 multiply 10  # -> NaN Invalid_operation\r
-ddmul991 multiply  # 10 -> NaN Invalid_operation\r
+ddmul9990 multiply 10  # -> NaN Invalid_operation\r
+ddmul9991 multiply  # 10 -> NaN Invalid_operation\r
 \r
 \r
 \r
index 97c3b09a6c18273e48199939c84f772e2dc24964..b9b0de570737948e0fa043fd8b7bc0b7410e257b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index d01f3c39a08c90952fc59b91da94591e28e56e1c..2bb2641aa813cd9e5d75fb8d348680bc69c4783b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index e00751bf487a3e6679cf4e6953113829c55fe35f..80e4ac66cb67d91c97ab2ec35e0ef8d691432988 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 3a8cdd642beb194b34b6cfa196eb57bb0299d685..903ced0d34c532faf439869152afdda6bfa9f3c7 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 962a656acecc942f663cce31fff5ebecc378969f..0a2b838cbf867309fbdfe97da33c567e27b36d0a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 234db927b36b7a13237d11a1481d71319c25d8c2..8cd52873131667b0e4ef4f469c86e3223a4cf274 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Most of the tests here assume a "regular pattern", where the\r
 -- sign and coefficient are +1.\r
index 71c82e1aaa4e1cd2155c65c711123bd4746b662b..545beebfb4eaad559ac128c05a3e54ba0d992b6d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index c7ea7626de42a305874818bc29184f96d271d7bf..d805a48380422e9811378be0506fcdbf79d78ba7 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
@@ -581,6 +581,19 @@ ddrem1056 remainder  1e-277 -1e+311 ->  1E-277
 ddrem1057 remainder -1e-277  1e+311 -> -1E-277\r
 ddrem1058 remainder -1e-277 -1e+311 -> -1E-277\r
 \r
+-- destructive subtract\r
+ddrem1101 remainder  1234567890123456  1.000000000000001  ->  0.765432109876546\r
+ddrem1102 remainder  1234567890123456   1.00000000000001  ->   0.65432109876557\r
+ddrem1103 remainder  1234567890123456    1.0000000000001  ->    0.5432109876668\r
+ddrem1104 remainder  1234567890123455  4.000000000000001  ->  2.691358027469137\r
+ddrem1105 remainder  1234567890123456  4.000000000000001  ->  3.691358027469137\r
+ddrem1106 remainder  1234567890123456    4.9999999999999  ->    0.6913578024696\r
+ddrem1107 remainder  1234567890123456   4.99999999999999  ->   3.46913578024691\r
+ddrem1108 remainder  1234567890123456  4.999999999999999  ->  1.246913578024691\r
+ddrem1109 remainder  1234567890123456  5.000000000000001  ->  0.753086421975309\r
+ddrem1110 remainder  1234567890123456   5.00000000000001  ->   3.53086421975310\r
+ddrem1111 remainder  1234567890123456    5.0000000000001  ->    1.3086421975314\r
+\r
 -- Null tests\r
 ddrem1000 remainder 10  # -> NaN Invalid_operation\r
 ddrem1001 remainder  # 10 -> NaN Invalid_operation\r
index 1f3bafd98d3b0645595969fe26a7b42f83595603..dfcd3ebfa8c5e8d798eccff30c7d0759f5ddaa0f 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
@@ -599,6 +599,7 @@ ddrmn969 remaindernear 123e1   9876543210987654 -> 1230
 \r
 ddrmn980 remaindernear 123e1 1000E299 -> 1.23E+3  -- 123E+1 internally\r
 \r
+\r
 -- overflow and underflow tests [from divide]\r
 ddrmn1051 remaindernear  1e+277  1e-311 ->  NaN Division_impossible\r
 ddrmn1052 remaindernear  1e+277 -1e-311 ->  NaN Division_impossible\r
@@ -609,6 +610,19 @@ ddrmn1056 remaindernear  1e-277 -1e+311 ->  1E-277
 ddrmn1057 remaindernear -1e-277  1e+311 -> -1E-277\r
 ddrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277\r
 \r
+-- destructive subtract\r
+ddrmn1100 remainderNear  1234567890123456  1.000000000000001  ->  -0.234567890123455\r
+ddrmn1101 remainderNear  1234567890123456   1.00000000000001  ->   -0.34567890123444\r
+ddrmn1102 remainderNear  1234567890123456    1.0000000000001  ->    -0.4567890123333\r
+ddrmn1103 remainderNear  1234567890123455  4.000000000000001  ->  -1.308641972530864\r
+ddrmn1104 remainderNear  1234567890123456  4.000000000000001  ->  -0.308641972530864\r
+ddrmn1115 remainderNear  1234567890123456    4.9999999999999  ->     0.6913578024696\r
+ddrmn1116 remainderNear  1234567890123456   4.99999999999999  ->   -1.53086421975308\r
+ddrmn1117 remainderNear  1234567890123456  4.999999999999999  ->   1.246913578024691\r
+ddrmn1118 remainderNear  1234567890123456  5.000000000000001  ->   0.753086421975309\r
+ddrmn1119 remainderNear  1234567890123456   5.00000000000001  ->   -1.46913578024691\r
+ddrmn1110 remainderNear  1234567890123456    5.0000000000001  ->     1.3086421975314\r
+\r
 -- Null tests\r
 ddrmn1000 remaindernear 10  # -> NaN Invalid_operation\r
 ddrmn1001 remaindernear  # 10 -> NaN Invalid_operation\r
index 473f2f68bf7dbdc86d272009700246f7077af621..e6294b3b102659b2cc1b293949b6175fdaf05f12 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index a396cd146e0df254698c86fd14e1dfc3c9edf902..6f7db15b9d057b13db754c000474e6c68524ce59 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decDoubles.\r
 precision:   16\r
index 4091f869435f3a713c9e076fc6fdbe24a83f0760..d0b92b51c929005b2bfc4f920b7dbbf64fbf9227 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 2cbe06a126f9d6bece71ac5da56e8a04f8a6656c..f2e80b36a4befa209c1d7b97ee54a7ccb65179d9 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index 89895e906399c7334175f7a220c287253d3c2833..b10f5e4e68e657e446e70ae0b99a2092c1dc6948 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decDoubles only; all arguments are\r
 -- representable in a decDouble\r
index 1e3e573cba17ebac4e1dd7428f74ae9249832c4e..438d347122892549c9e8a97133de439c3161bc03 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests tests the extended specification 'round-to-integral\r
 -- value-exact' operations (from IEEE 854, later modified in 754r).\r
index 783fc2bf9a98b396cef30dbdc2e58734a27ecc24..78e975054a0e507f883030778f75671e8c94e0e0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 precision:   16\r
 maxExponent: 384\r
index d5205b77abf6b7f366708aef11d9dc6d064b526e..bdbf67876709da12fd45d204ab4142de92be7759 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- decDouble tests
 dectest: ddAbs
index 4d100695e1cb10cfbf17e005c1a7dfaed452347b..e9ec66356cfafcfa53a9daa420056d8e765cd8f5 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- decQuad tests
 dectest: dqAbs
index c661fe4c7396dd438a4011ab0f1363c7eb15f875..aae9b370de79de7726d27ec6743a1fa4ffc6d251 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- decSingle tests
 dectest: dsBase
index 1cb82b4ff3fcd1cc236527e4a37bcb3f2dbd3fee..ae2bc0853a2a8e2df5b8ae32f9a63d70595d16d9 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index dfa17ca983d1590e1c367668748e500d3cfde65b..1c940f56013297112f4a6215b60ab12047ee7ced 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 01d1f308912ce784ad61eef354ecd95106902175..df010acf7b3b367ebda878f3a7e827dc813883ab 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index 72238d33f91402cfd687f6ecf7ea5e569e2a481b..256bc9845547c4f5c03fc52972eab64f504e11b5 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decQuads only; all arguments are\r
 -- representable in a decQuad\r
index be3fb34d275df5e3e6ded86ca5df186033dc42a4..e00d44d75de2b94897936804fffa78e7a184885d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index 6cf2f7f4eadf2a4e778ffff7b20b9daaab88c453..3f2569beff1ae4e3aec1fd04612eded77f534b55 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This file tests base conversions from string to a decimal number\r
 -- and back to a string (in Scientific form)\r
index a6b801ac1f5f02dafeb80657744cb96743d7448e..e13c3478e04df375b0ffa7c9040c7feee0d8b685 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This file tests that copy operations leave uncanonical operands\r
 -- unchanged, and vice versa\r
index 185fbfc4930e003ec7ebfbe5786ccc832e67cbe0..a4703f75d57d0b3691fbc4f0de2b818ffa94b7d1 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- [New 2006.11.27]\r
 \r
index 8947280376ef060510e824aa50902a121e958953..7fccdf163ee8a7b5e0d124b461896ee41e4cab81 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index 43833eac9040e667e17659ed61c1b784671df83e..36d5e9b0461266c7829fc06c337b7c7d5d8c5a41 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index d4a7c5ad838981bbb76507340cd0eeae4b25f10e..f5cec0600b79f610104a1a142e30b7b954625a8d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index 9461d6b193991fcfe880daa0b0fa330ab2a3d359..76c10899fe93c85bc5a375256df6dd14c329e18e 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Note that we cannot assume add/subtract tests cover paths adequately,\r
 -- here, because the code might be quite different (comparison cannot\r
index b8337765bc5fed46fe6541f9bfd14631a34b32de..b7688015c59c97e94689e1032a3c001404b1d495 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 91f4a68759d1e46ab4270931fcce11287468965a..427e6dd2eee7698e065f06c095158fdab8b3bd33 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 22ac89c44cca73b7e2082b37043494c19a31a852..34a6f3c25d7649ef3fd443fc2b0089657cc59823 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 8f275cdc6fa1cbff55fb7cc3889b39169a85463c..902c93706902eeb7f0f55f5f006729cfb7ba9b3b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index a84e1d09a4abbf807407ffb1ad3d257255138081..1ea6d3194dc08b9d47bd5636869c7f1deea8afc6 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index 953c1e0118de2c579955afdd5ade273e188a24b0..b5eec63d02aafb7a5aa033e9a4777b00b282da9b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index ed3f328d0e94c622183cb0613b211edc21fbced5..fcb512bcde0accb6bb4ffb4f86d2de37b92f5244 100644 (file)
@@ -18,7 +18,7 @@
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
 -- [Previously called decimal128.decTest]\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests is for the sixteen-byte concrete representation.\r
 -- Its characteristics are:\r
@@ -468,3 +468,10 @@ decq828 apply  #22080000000000000000000115afb55a ->  4294967294
 decq829 apply  #22080000000000000000000115afb55b ->  4294967295\r
 decq830 apply  #22080000000000000000000115afb57a ->  4294967296\r
 decq831 apply  #22080000000000000000000115afb57b ->  4294967297\r
+\r
+-- VG testcase\r
+decq840 apply    #2080000000000000F294000000172636 -> 8.81125000000001349436E-1548\r
+decq841 apply    #20800000000000008000000000000000 -> 8.000000000000000000E-1550\r
+decq842 apply    #1EF98490000000010F6E4E0000000000 -> 7.049000000000010795488000000000000E-3097\r
+decq843 multiply #20800000000000008000000000000000 #2080000000000000F294000000172636 -> #1EF98490000000010F6E4E0000000000 Rounded\r
+\r
index 37d7749c2a530dd3489338908ea6b585f8d02e7e..f68fdf924804a717c6b71c0a419bc31cdc07177d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
@@ -1754,6 +1754,31 @@ dqadd375087 fma  1  12398765432112345678945678 1E-33                   -> 123987
 dqadd375088 fma  1  12398765432112345678945678 1E-34                   -> 12398765432112345678945678.00000001 Inexact Rounded\r
 dqadd375089 fma  1  12398765432112345678945678 1E-35                   -> 12398765432112345678945678.00000001 Inexact Rounded\r
 \r
+-- Destructive subtract (from remainder tests)\r
+\r
+-- +++ some of these will be off-by-one remainder vs remainderNear\r
+\r
+dqfma4000  fma  -1234567890123456789012345678901233   1.000000000000000000000000000000001    1234567890123456789012345678901234  ->  -0.234567890123456789012345678901233\r
+dqfma4001  fma  -1234567890123456789012345678901222    1.00000000000000000000000000000001    1234567890123456789012345678901234  ->  -0.34567890123456789012345678901222\r
+dqfma4002  fma  -1234567890123456789012345678901111     1.0000000000000000000000000000001    1234567890123456789012345678901234  ->  -0.4567890123456789012345678901111\r
+dqfma4003  fma   -308641972530864197253086419725314   4.000000000000000000000000000000001    1234567890123456789012345678901255  ->  -1.308641972530864197253086419725314\r
+dqfma4004  fma   -308641972530864197253086419725308   4.000000000000000000000000000000001    1234567890123456789012345678901234  ->  1.691358027469135802746913580274692\r
+dqfma4005  fma   -246913578024691357802469135780252     4.9999999999999999999999999999999    1234567890123456789012345678901234  ->  -1.3086421975308642197530864219748\r
+dqfma4006  fma   -246913578024691357802469135780247    4.99999999999999999999999999999999    1234567890123456789012345678901234  ->  1.46913578024691357802469135780247\r
+dqfma4007  fma   -246913578024691357802469135780247   4.999999999999999999999999999999999    1234567890123456789012345678901234  ->  -0.753086421975308642197530864219753\r
+dqfma4008  fma   -246913578024691357802469135780247   5.000000000000000000000000000000001    1234567890123456789012345678901234  ->  -1.246913578024691357802469135780247\r
+dqfma4009  fma   -246913578024691357802469135780246    5.00000000000000000000000000000001    1234567890123456789012345678901234  ->  1.53086421975308642197530864219754\r
+dqfma4010  fma   -246913578024691357802469135780242     5.0000000000000000000000000000001    1234567890123456789012345678901234  ->  -0.6913578024691357802469135780242\r
+dqfma4011  fma  -1234567890123456789012345678901232   1.000000000000000000000000000000001    1234567890123456789012345678901234  ->  0.765432109876543210987654321098768\r
+dqfma4012  fma  -1234567890123456789012345678901221    1.00000000000000000000000000000001    1234567890123456789012345678901234  ->  0.65432109876543210987654321098779\r
+dqfma4013  fma  -1234567890123456789012345678901110     1.0000000000000000000000000000001    1234567890123456789012345678901234  ->  0.5432109876543210987654321098890\r
+dqfma4014  fma   -308641972530864197253086419725313   4.000000000000000000000000000000001    1234567890123456789012345678901255  ->  2.691358027469135802746913580274687\r
+dqfma4015  fma   -308641972530864197253086419725308   4.000000000000000000000000000000001    1234567890123456789012345678901234  ->  1.691358027469135802746913580274692\r
+dqfma4016  fma   -246913578024691357802469135780251     4.9999999999999999999999999999999    1234567890123456789012345678901234  ->  3.6913578024691357802469135780251\r
+dqfma4017  fma   -246913578024691357802469135780247    4.99999999999999999999999999999999    1234567890123456789012345678901234  ->  1.46913578024691357802469135780247\r
+dqfma4018  fma   -246913578024691357802469135780246   4.999999999999999999999999999999999    1234567890123456789012345678901234  ->  4.246913578024691357802469135780246\r
+dqfma4019  fma   -246913578024691357802469135780241     5.0000000000000000000000000000001    1234567890123456789012345678901234  ->  4.3086421975308642197530864219759\r
+\r
 -- Null tests\r
 dqadd39990 fma  1  10  # -> NaN Invalid_operation\r
 dqadd39991 fma  1   # 10 -> NaN Invalid_operation\r
index 94ba93c76aaa8db82b894bf1d050e63a254036ba..19161c2f13e52dab3ac9e5195555ab18c21d9c42 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index baa6d1e6b60f85d6b9ca5766e980fc6740a182e9..d6cf831411a34fcf5a8d4245455b28e399db4bfb 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index a00ec1c30490c3d92fa99f5b965cc66583d70fd2..a3ba64c8911e467a5e5e447516d56846d8c63a32 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 53eb82c13b6c5d1edc984de21e9fd644dcd2978e..01b27935e779aa14d9d505ebea6f1612e6851be3 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 9e34694d93e740509c16430d96f1385ab01014d9..1b82be2fd028e82325b6e225eb96f2d758fed02e 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 733acfdd12faa7d086ba315b6ecedfe508da1103..6d5e4b5266c55c058943527365bc92d73116a83f 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 50ac85a335158a2768d35271120b7c31c1858b42..bf69938a172371bb824c50d8b6ccc2dd63f0337f 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index a6f85e0fdc55883ee7037a3035f2945afb23fcaa..c87cc8fd7126f298da26d05b66d82e4ead13284d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decQuads only; all arguments are\r
 -- representable in a decQuad\r
@@ -456,18 +456,134 @@ dqmul908 multiply  9.999999999999999999999999999999999E-6143  0.0999999999999999
 \r
 -- hugest\r
 dqmul909 multiply 9999999999999999999999999999999999 9999999999999999999999999999999999 -> 9.999999999999999999999999999999998E+67 Inexact Rounded\r
+-- VG case\r
+dqmul910 multiply 8.81125000000001349436E-1548 8.000000000000000000E-1550 -> 7.049000000000010795488000000000000E-3097 Rounded\r
 \r
 -- Examples from SQL proposal (Krishna Kulkarni)\r
 precision:   34\r
 rounding:    half_up\r
 maxExponent: 6144\r
 minExponent: -6143\r
-dqmul1001  multiply 130E-2  120E-2 -> 1.5600\r
-dqmul1002  multiply 130E-2  12E-1  -> 1.560\r
-dqmul1003  multiply 130E-2  1E0    -> 1.30\r
-dqmul1004  multiply 1E2     1E4    -> 1E+6\r
+dqmul911  multiply 130E-2  120E-2 -> 1.5600\r
+dqmul912  multiply 130E-2  12E-1  -> 1.560\r
+dqmul913  multiply 130E-2  1E0    -> 1.30\r
+dqmul914  multiply 1E2     1E4    -> 1E+6\r
+\r
+-- power-of-ten edge cases\r
+dqmul1001 multiply  1      10               -> 10\r
+dqmul1002 multiply  1      100              -> 100\r
+dqmul1003 multiply  1      1000             -> 1000\r
+dqmul1004 multiply  1      10000            -> 10000\r
+dqmul1005 multiply  1      100000           -> 100000\r
+dqmul1006 multiply  1      1000000          -> 1000000\r
+dqmul1007 multiply  1      10000000         -> 10000000\r
+dqmul1008 multiply  1      100000000        -> 100000000\r
+dqmul1009 multiply  1      1000000000       -> 1000000000\r
+dqmul1010 multiply  1      10000000000      -> 10000000000\r
+dqmul1011 multiply  1      100000000000     -> 100000000000\r
+dqmul1012 multiply  1      1000000000000    -> 1000000000000\r
+dqmul1013 multiply  1      10000000000000   -> 10000000000000\r
+dqmul1014 multiply  1      100000000000000  -> 100000000000000\r
+dqmul1015 multiply  1      1000000000000000 -> 1000000000000000\r
+\r
+dqmul1016 multiply  1      1000000000000000000 -> 1000000000000000000\r
+dqmul1017 multiply  1      100000000000000000000000000 -> 100000000000000000000000000\r
+dqmul1018 multiply  1      1000000000000000000000000000 -> 1000000000000000000000000000\r
+dqmul1019 multiply  1      10000000000000000000000000000 -> 10000000000000000000000000000\r
+dqmul1020 multiply  1      1000000000000000000000000000000000 -> 1000000000000000000000000000000000\r
+\r
+dqmul1021 multiply  10     1                -> 10\r
+dqmul1022 multiply  10     10               -> 100\r
+dqmul1023 multiply  10     100              -> 1000\r
+dqmul1024 multiply  10     1000             -> 10000\r
+dqmul1025 multiply  10     10000            -> 100000\r
+dqmul1026 multiply  10     100000           -> 1000000\r
+dqmul1027 multiply  10     1000000          -> 10000000\r
+dqmul1028 multiply  10     10000000         -> 100000000\r
+dqmul1029 multiply  10     100000000        -> 1000000000\r
+dqmul1030 multiply  10     1000000000       -> 10000000000\r
+dqmul1031 multiply  10     10000000000      -> 100000000000\r
+dqmul1032 multiply  10     100000000000     -> 1000000000000\r
+dqmul1033 multiply  10     1000000000000    -> 10000000000000\r
+dqmul1034 multiply  10     10000000000000   -> 100000000000000\r
+dqmul1035 multiply  10     100000000000000  -> 1000000000000000\r
+\r
+dqmul1036 multiply  10     100000000000000000 -> 1000000000000000000\r
+dqmul1037 multiply  10     10000000000000000000000000 -> 100000000000000000000000000\r
+dqmul1038 multiply  10     100000000000000000000000000 -> 1000000000000000000000000000\r
+dqmul1039 multiply  10     1000000000000000000000000000 -> 10000000000000000000000000000\r
+dqmul1040 multiply  10     100000000000000000000000000000000 -> 1000000000000000000000000000000000\r
+\r
+dqmul1041 multiply  100    0.1              -> 10.0\r
+dqmul1042 multiply  100    1                -> 100\r
+dqmul1043 multiply  100    10               -> 1000\r
+dqmul1044 multiply  100    100              -> 10000\r
+dqmul1045 multiply  100    1000             -> 100000\r
+dqmul1046 multiply  100    10000            -> 1000000\r
+dqmul1047 multiply  100    100000           -> 10000000\r
+dqmul1048 multiply  100    1000000          -> 100000000\r
+dqmul1049 multiply  100    10000000         -> 1000000000\r
+dqmul1050 multiply  100    100000000        -> 10000000000\r
+dqmul1051 multiply  100    1000000000       -> 100000000000\r
+dqmul1052 multiply  100    10000000000      -> 1000000000000\r
+dqmul1053 multiply  100    100000000000     -> 10000000000000\r
+dqmul1054 multiply  100    1000000000000    -> 100000000000000\r
+dqmul1055 multiply  100    10000000000000   -> 1000000000000000\r
+\r
+dqmul1056 multiply  100    10000000000000000 -> 1000000000000000000\r
+dqmul1057 multiply  100    1000000000000000000000000 -> 100000000000000000000000000\r
+dqmul1058 multiply  100    10000000000000000000000000 -> 1000000000000000000000000000\r
+dqmul1059 multiply  100    100000000000000000000000000 -> 10000000000000000000000000000\r
+dqmul1060 multiply  100    10000000000000000000000000000000 -> 1000000000000000000000000000000000\r
+\r
+dqmul1061 multiply  1000   0.01             -> 10.00\r
+dqmul1062 multiply  1000   0.1              -> 100.0\r
+dqmul1063 multiply  1000   1                -> 1000\r
+dqmul1064 multiply  1000   10               -> 10000\r
+dqmul1065 multiply  1000   100              -> 100000\r
+dqmul1066 multiply  1000   1000             -> 1000000\r
+dqmul1067 multiply  1000   10000            -> 10000000\r
+dqmul1068 multiply  1000   100000           -> 100000000\r
+dqmul1069 multiply  1000   1000000          -> 1000000000\r
+dqmul1070 multiply  1000   10000000         -> 10000000000\r
+dqmul1071 multiply  1000   100000000        -> 100000000000\r
+dqmul1072 multiply  1000   1000000000       -> 1000000000000\r
+dqmul1073 multiply  1000   10000000000      -> 10000000000000\r
+dqmul1074 multiply  1000   100000000000     -> 100000000000000\r
+dqmul1075 multiply  1000   1000000000000    -> 1000000000000000\r
+\r
+dqmul1076 multiply  1000   1000000000000000 -> 1000000000000000000\r
+dqmul1077 multiply  1000   100000000000000000000000 -> 100000000000000000000000000\r
+dqmul1078 multiply  1000   1000000000000000000000000 -> 1000000000000000000000000000\r
+dqmul1079 multiply  1000   10000000000000000000000000 -> 10000000000000000000000000000\r
+dqmul1080 multiply  1000   1000000000000000000000000000000 -> 1000000000000000000000000000000000\r
+\r
+dqmul1081 multiply  10000  0.001            -> 10.000\r
+dqmul1082 multiply  10000  0.01             -> 100.00\r
+dqmul1083 multiply  10000  0.1              -> 1000.0\r
+dqmul1084 multiply  10000  1                -> 10000\r
+dqmul1085 multiply  10000  10               -> 100000\r
+dqmul1086 multiply  10000  100              -> 1000000\r
+dqmul1087 multiply  10000  1000             -> 10000000\r
+dqmul1088 multiply  10000  10000            -> 100000000\r
+dqmul1089 multiply  10000  100000           -> 1000000000\r
+dqmul1090 multiply  10000  1000000          -> 10000000000\r
+dqmul1091 multiply  10000  10000000         -> 100000000000\r
+dqmul1092 multiply  10000  100000000        -> 1000000000000\r
+dqmul1093 multiply  10000  1000000000       -> 10000000000000\r
+dqmul1094 multiply  10000  10000000000      -> 100000000000000\r
+dqmul1095 multiply  10000  100000000000     -> 1000000000000000\r
+\r
+dqmul1096 multiply  10000  100000000000000 -> 1000000000000000000\r
+dqmul1097 multiply  10000  10000000000000000000000 -> 100000000000000000000000000\r
+dqmul1098 multiply  10000  100000000000000000000000 -> 1000000000000000000000000000\r
+dqmul1099 multiply  10000  1000000000000000000000000 -> 10000000000000000000000000000\r
+dqmul1100 multiply  10000  100000000000000000000000000000 -> 1000000000000000000000000000000000\r
+\r
+dqmul1107 multiply  10000   99999999999     ->  999999999990000\r
+dqmul1108 multiply  10000   99999999999     ->  999999999990000\r
 \r
 -- Null tests\r
-dqmul990 multiply 10  # -> NaN Invalid_operation\r
-dqmul991 multiply  # 10 -> NaN Invalid_operation\r
+dqmul9990 multiply 10  # -> NaN Invalid_operation\r
+dqmul9991 multiply  # 10 -> NaN Invalid_operation\r
 \r
index 488081687560fbde776d15de9e32bd25a6302be1..e1e3b06568184d5b85613fee37d259e68d6e4eae 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 8c0ac45e26a7dc1d524412aa05b58c3ec278a6fe..973c8eb3b83705f6818bb0998bcf2e8a95be1ffb 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index e5349513b2c09b62463d24c9c5e5edb28a3ca9e0..0eb677095df7079a3956cd7514ec4023f48bc0f0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 60470ea45a79ebbb57b4e5003620dab3f6ad14b1..093edcb21a66ca94adcaa23cb717494671594625 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index 5dc5a68c5d3f774a842ff78a419dd8788348feef..ad5b7be261d1ef4a9d868f24ad79fc3378c39494 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index aa8cf2e5388e315f4c6405367be226def24711bf..4c3e1ea6f93dab47c16a6359953fb8b78c1c7036 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Most of the tests here assume a "regular pattern", where the\r
 -- sign and coefficient are +1.\r
index 183e9dcf2c2181655ff4f1cf867088bc5ea40c3f..c0690400a75f6b6357fb4678bf999efd643e5871 100644 (file)
@@ -18,7 +18,7 @@
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
 \r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index e30fde7d2479795cd32ad9f19f06f6be51a23ff1..14c358ce23e5eb97385018ac47a92bcebf65433a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
@@ -580,6 +580,17 @@ dqrem1058 remainder -1e-277 -1e+311 -> -1E-277
 -- Gyuris example\r
 dqrem1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143\r
 \r
+-- destructive subtract\r
+dqrem1120  remainder  1234567890123456789012345678901234  1.000000000000000000000000000000001  ->  0.765432109876543210987654321098768\r
+dqrem1121  remainder  1234567890123456789012345678901234   1.00000000000000000000000000000001  ->   0.65432109876543210987654321098779\r
+dqrem1122  remainder  1234567890123456789012345678901234    1.0000000000000000000000000000001  ->    0.5432109876543210987654321098890\r
+dqrem1123  remainder  1234567890123456789012345678901255  4.000000000000000000000000000000001  ->  2.691358027469135802746913580274687\r
+dqrem1124  remainder  1234567890123456789012345678901234  4.000000000000000000000000000000001  ->  1.691358027469135802746913580274692\r
+dqrem1125  remainder  1234567890123456789012345678901234    4.9999999999999999999999999999999  ->    3.6913578024691357802469135780251\r
+dqrem1126  remainder  1234567890123456789012345678901234   4.99999999999999999999999999999999  ->   1.46913578024691357802469135780247\r
+dqrem1127  remainder  1234567890123456789012345678901234  4.999999999999999999999999999999999  ->  4.246913578024691357802469135780246\r
+dqrem1128  remainder  1234567890123456789012345678901234    5.0000000000000000000000000000001  ->    4.3086421975308642197530864219759\r
+\r
 -- Null tests\r
 dqrem1000 remainder 10  # -> NaN Invalid_operation\r
 dqrem1001 remainder  # 10 -> NaN Invalid_operation\r
index b62b79fbce280646f16746309d00b82cb7b51105..9074ec498634eccadc4a79e6ef3f0951b85a4a4b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
@@ -612,6 +612,19 @@ dqrmn1058 remaindernear -1e-277 -1e+311 -> -1E-277
 -- Gyuris example\r
 dqrmn1070 remainder 8.336804418094040989630006819881709E-6143 8.336804418094040989630006819889000E-6143 -> 8.336804418094040989630006819881709E-6143\r
 \r
+-- destructive subtract\r
+dqrmn1101  remaindernear  1234567890123456789012345678901234  1.000000000000000000000000000000001  ->  -0.234567890123456789012345678901233\r
+dqrmn1102  remaindernear  1234567890123456789012345678901234   1.00000000000000000000000000000001  ->   -0.34567890123456789012345678901222\r
+dqrmn1103  remaindernear  1234567890123456789012345678901234    1.0000000000000000000000000000001  ->    -0.4567890123456789012345678901111\r
+dqrmn1104  remaindernear  1234567890123456789012345678901255  4.000000000000000000000000000000001  ->  -1.308641972530864197253086419725314\r
+dqrmn1105  remaindernear  1234567890123456789012345678901234  4.000000000000000000000000000000001  ->   1.691358027469135802746913580274692\r
+dqrmn1106  remaindernear  1234567890123456789012345678901234    4.9999999999999999999999999999999  ->    -1.3086421975308642197530864219748\r
+dqrmn1107  remaindernear  1234567890123456789012345678901234   4.99999999999999999999999999999999  ->    1.46913578024691357802469135780247\r
+dqrmn1108  remaindernear  1234567890123456789012345678901234  4.999999999999999999999999999999999  ->  -0.753086421975308642197530864219753\r
+dqrmn1109  remaindernear  1234567890123456789012345678901234  5.000000000000000000000000000000001  ->  -1.246913578024691357802469135780247\r
+dqrmn1110  remaindernear  1234567890123456789012345678901234   5.00000000000000000000000000000001  ->    1.53086421975308642197530864219754\r
+dqrmn1111  remaindernear  1234567890123456789012345678901234    5.0000000000000000000000000000001  ->    -0.6913578024691357802469135780242\r
+\r
 -- Null tests\r
 dqrmn1000 remaindernear 10  # -> NaN Invalid_operation\r
 dqrmn1001 remaindernear  # 10 -> NaN Invalid_operation\r
index f21813c5658e468b929d15455d54d2576a33be7a..671cd958452bf8c1ad58332609557997c290b7d4 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index e7264cb396a14a71296925dc10a2e4163a5aa516..acf72666cbff77804f55db185721723077c8f56d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- All operands and results are decQuads.\r
 extended:    1\r
index 88a3f9debc037384fbeddb2f630d80ba8ee2a513..7355cf05939faba95ec0f471e009285f5d2f9eeb 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index e728ec5b40d77ff47bf499b936e97572fe006e81..33df91f28756514a8ee2b541d19fa0ce0e4d2f9c 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index 923742c0e2c43ab27d6ce33a7d654bad5ac96817..d2df184b8128acaea5b40de149cdc0f45f2baae7 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests are for decQuads only; all arguments are\r
 -- representable in a decQuad\r
index ac50a4ad8855c9ccfa9e3eebe0f1ffe3fd40d15a..449dead51a3efe8e89878285e6f9a2e1e87516d7 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests tests the extended specification 'round-to-integral\r
 -- value-exact' operations (from IEEE 854, later modified in 754r).\r
index 61bdbe20d83bea3b5114bfd20bc2a1ffc8fe947f..d9e9af670c1a6948263c0980a9dd63bd6977c207 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 clamp:       1\r
index d0632fd9921caa08684143ab28316bb73872e2ec..e2fb4ba25bc938a2e68017f9cb74116a8ab7521a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This file tests base conversions from string to a decimal number\r
 -- and back to a string (in Scientific form)\r
@@ -1058,4 +1058,5 @@ dsbas1106 toSci +1E-398 ->  0E-101 Inexact Rounded Subnormal Underflow Clamped
 dsbas1107 toSci +1E-383 ->  0E-101 Inexact Rounded Subnormal Underflow Clamped\r
 dsbas1108 toSci +9.999999999999999E+384 ->  Infinity Overflow Inexact Rounded\r
 \r
-\r
+-- narrowing case\r
+dsbas1110 toSci 2.000000000000000E-99 -> 2.00E-99 Rounded Subnormal\r
index 185ddc7a77eb330d150c5618424d51d4405e039e..7e72d4b04af530f89ed4f9482a82df59c41ccef4 100644 (file)
@@ -18,7 +18,7 @@
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
 -- [Previously called decimal32.decTest]\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests is for the four-byte concrete representation.\r
 -- Its characteristics are:\r
@@ -367,3 +367,6 @@ decs785 apply   #225001ff       -> 999
 decs786 apply   #225002ff       -> 999\r
 decs787 apply   #225003ff       -> 999\r
 \r
+-- narrowing case\r
+decs790 apply 2.00E-99 -> #00000100 Subnormal\r
+decs791 apply #00000100 -> 2.00E-99 Subnormal\r
index c07ed5a3f810d7a882c3b825b55fdf4ebb755f75..97256e48526858e3af53a7fcee6c97e8afd630ac 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- Tests of the exponential funtion.  Currently all testcases here\r
 -- show results which are correctly rounded (within <= 0.5 ulp).\r
index aa4c0ba0e85a4dc659a40d2534c96b0963bff7e8..d7caa2611d90638efeba64e4a67a338b99d5e840 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index b61c85a67bf8e2c15b19fc2f860201aa1944a82c..896e6c839c27712f9c7a9aed59c95b33c2c9db89 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 19fdeebac86f79a6edd470293c98741bbd4c95b8..7bccb1fffc3d4d9deecc514bb774efcd64b8c260 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 44ae4d259976fdf84507680dccf9ce7008fd75dc..16e247e9af5213cbb0728835aa9e70e933858138 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   16\r
index 9841acb42e3ee1433ff2c74f31597f323b892b4b..bb033a808eabb5e06318dc5f589fb14c3fff1aaf 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This emphasises the testing of notable cases, as they will often\r
 -- have unusual paths (especially the 10**n results).\r
index 577f7a43d50cbfd1a0a5cb1de77afbcb30b2c37d..a672206e5395af05b7587f71e6f0ab7da314df61 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This emphasises the testing of notable cases, as they will often\r
 -- have unusual paths (especially the 10**n results).\r
index 88d0b5e1b1bd6f567d8e28be4e04c4e698a4c3fe..d7a6a944b4ebc31b973c48349309c5941c213af0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- we assume that base comparison is tested in compare.decTest, so
 -- these mainly cover special cases and rounding
index b14d015e416133e3578eef3cb06193a39a7658d5..012976662e9dea4c9144e53076c208892a6b7eff 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index 345e3ebd588579710fdd48b7f0fdfefd85052ab2..b69507984d3b22843cc26888e23d6106cd27972d 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- we assume that base comparison is tested in compare.decTest, so
 -- these mainly cover special cases and rounding
index fa9d927ecbf2d7f13b11d506818ed0221bb46868..547ccffceaf0e5af520da6437533a5c549d7b9a2 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- we assume that base comparison is tested in compare.decTest, so\r
 -- these mainly cover special cases and rounding\r
index e9afc3a091acc9cc95c0edfa4b12660fd91dd531..f9112860304c84bc8c37acdf3fc39125968315ee 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- This set of tests primarily tests the existence of the operator.
 -- Subtraction, rounding, and more overflows are tested elsewhere.
index 71f591ab7cd3e3ca8b1842d2e170614a74e5fb2e..a6c7ebe868a08c4397197e052ef6a88dbcadc59b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 200580dc9ea587a2c7d6225b61b99dd8d6095716..be33158022a0b1fd6ffa2a905ee8e3f6099ebbad 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 01815ee0bbb64c8f5e3eb9e37fb826666689695f..6cee16a0e5022d4fd76df43dae2c1fe3e8c80d4b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index cb60f57ae58627b0dc453ca86373f87fe135b86a..aa1891a82f71c5e2c829c87d50dd5201d24eb04b 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 928939e77ddcba7fe9c3cd289422ad19e4793c07..ace901b6619376f491746a50e85acd4878ee648a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 9af4c0e990ef59d248fc4576bff1e7692c136605..1df3dfe3fd45bb4c969880a87a6369e8864a0bbc 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- This set of tests primarily tests the existence of the operator.
 -- Addition and rounding, and most overflows, are tested elsewhere.
index 78c1e072fd192a2c5dd025d3f706b6a9022e52c2..69e8644e6c8026af99088b92affce77d416f6e05 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- In addition to the power operator testcases here, see also the file
 -- powersqrt.decTest which includes all the tests from
index 36e5cbbbc369c5bfa969d781515acefb8bdb5bc2..6f79f6c7c6640e5d03c93b7e48a4db992b301ac9 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- These testcases are taken from squareroot.decTest but are\r
 -- evaluated using the power operator.  The differences in results\r
index a60f1bf553f8fdb469d4e5e8f45525bdc5c73e1c..1e5511ff0e03e1e7e7b00383d6fb8d535179d458 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- Most of the tests here assume a "regular pattern", where the
 -- sign and coefficient are +1.
index 7f115adcfed3e6ea5988c6834d668317a36b3a5b..0d5881d8f64192da7721ac9ba69bd62849812795 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.55
+version: 2.57
 
 -- These testcases test calculations at precisions 31, 32, and 33, to
 -- exercise the boundaries around 2**5
index 1529aec60b2353c24fbcbe884eac732293231448..a03b8d564371f07a453cb5ea881b86646ab514d6 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 maxexponent: 999999999
index ddce0c9f921a2fbd669f90b74359729afd097245..189a687e97a2c5826626b90a4fc3a259d3657552 100644 (file)
@@ -19,7 +19,7 @@
 ------------------------------------------------------------------------
 -- [This used to be called normalize.]
 
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 4c92d0c93b8aab3ea0cfb7e839d45645f2302079..1a51c265c42d77b639e5a6ca54556024ccc43ca4 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index cfca91b14ad3f74c0af9d3a22113dfb24bf85cdf..fdc1bd870326c5b55284eb40a7487294f3fe28e0 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.55
+version: 2.57
 
 extended:    1
 precision:   9
@@ -413,6 +413,18 @@ rmnx605 remaindernear   7.7 8  -> -0.3
 rmnx606 remaindernear  31.5 3  -> 1.5    -- i=10
 rmnx607 remaindernear  34.5 3  -> -1.5   -- i=11
 
+-- zero signs
+rmnx650 remaindernear  1  1 ->  0
+rmnx651 remaindernear -1  1 -> -0
+rmnx652 remaindernear  1 -1 ->  0
+rmnx653 remaindernear -1 -1 -> -0
+rmnx654 remaindernear  0  1 ->  0
+rmnx655 remaindernear -0  1 -> -0
+rmnx656 remaindernear  0 -1 ->  0
+rmnx657 remaindernear -0 -1 -> -0
+rmnx658 remaindernear  0.00  1  ->  0.00
+rmnx659 remaindernear -0.00  1  -> -0.00
+
 -- Specials
 rmnx680 remaindernear  Inf  -Inf   ->  NaN Invalid_operation
 rmnx681 remaindernear  Inf  -1000  ->  NaN Invalid_operation
index 30597db113cb1180d0af7f0d94873fa974c28fab..882f5706a5040ae3215efda92173663fe9437f67 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- [obsolete]   Quantize.decTest has the improved version
 
index c5ced5952b6a2b743bb711460a267a42b70fbca8..32dbd537c49a38c4fa29113c7ac22cbd2d18357f 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index d24fbfb37fec0ac97276d874ba902b186a8c5cf3..82ca1b0fffb50f53b1ed49dc0359e1a7f00e35cb 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- These tests require that implementations take account of residues in
 -- order to get correct results for some rounding modes.  Rather than
index 0b1efff24c797824138102d2c718973a7470fe20..3fa6cff2037bc6aaf442e3db49c4b9473b446f89 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 0761deaacc91591f10c2465d9e3293ce43c48d87..e77d938d9f8b92322be6ca08932fd4f10f37d6df 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index c2a40cc9306a5510287580dd333dcb6506410723..397024ef5511de22410514da8fb6e70b64457884 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 2ccff5adf5add97f46ad3f43ac6a65cd49a35616..8d7b26e081240e20812cbc3d8945e7fa90de48b5 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 338a09c0e38acce8f2c9025383b181e41ca00604..a1eca3107e19591eb4d047001f2fa1a3e7cfbd38 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 extended:    1
 precision:   9
index 1cbc20e44f1775795cfba4e39eb875e9c289c84d..673aaa485fafe594907a0bd89a5c9e319ac0095a 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- core tests (using Extended: 1) --------------------------------------
 dectest: base
index ad25e6be03896e050441597481bf59d08789fb38..340515cb17425d7d8577d7499a8d535b768b2a78 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
 --   mfc@uk.ibm.com                                                   --
 ------------------------------------------------------------------------
-version: 2.56
+version: 2.57
 
 -- This set of tests tests the extended specification 'round-to-integral
 -- value' operation (from IEEE 854, later modified in 754r).
index d9bc9f36d08d63bb6f19cbbaee217ae1b29d72f8..381216dea6a7f3a774341ff1bcd3e6e839034a64 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 -- This set of tests tests the extended specification 'round-to-integral\r
 -- value' operation (from IEEE 854, later modified in 754r).\r
index 2ac1b371fef8418fdcf0246a2190aa873a1da4ba..1f3b03b4cb6bc491025924ad0dfa2461b6bf6b49 100644 (file)
@@ -17,7 +17,7 @@
 --   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --\r
 --   mfc@uk.ibm.com                                                   --\r
 ------------------------------------------------------------------------\r
-version: 2.56\r
+version: 2.57\r
 \r
 extended:    1\r
 precision:   9\r
index 98b94790fb7951f1f030d9eac649131495c25dd6..3c64e64562fa6150a1075170c6d1c1587637e5ac 100644 (file)
@@ -464,6 +464,7 @@ class DecimalExplicitConstructionTest(unittest.TestCase):
         self.assertRaises(ValueError, Decimal, (1, (4, 3, 4, None, 1), 2) )
         self.assertRaises(ValueError, Decimal, (1, (4, -3, 4, 9, 1), 2) )
         self.assertRaises(ValueError, Decimal, (1, (4, 10, 4, 9, 1), 2) )
+        self.assertRaises(ValueError, Decimal, (1, (4, 3, 4, 'a', 1), 2) )
 
     def test_explicit_from_Decimal(self):
 
index 3b89097312991d0f9177e4749a47367cc633d55c..02034b4603dc1572055613159f7693e175906dce 100644 (file)
@@ -1916,6 +1916,7 @@ def test_DocFileSuite():
        provided.
 
          >>> import unittest, pkgutil, test
+         >>> added_loader = False
          >>> if not hasattr(test, '__loader__'):
          ...     test.__loader__ = pkgutil.get_loader(test)
          ...     added_loader = True
index bd9caffd6f0f7c106f858eea217e8fff5aa6cedd..b9b2e6e5569630c571f27a34742a1dd9a6825e42 100644 (file)
@@ -215,6 +215,17 @@ def test_func_closure():
     verify(c[0].__class__.__name__ == "cell") # don't have a type object handy
     cantset(f, "__closure__", c)
 
+def test_empty_cell():
+    def f(): print(a)
+    try:
+        f.__closure__[0].cell_contents
+    except ValueError:
+        pass
+    else:
+        raise TestFailed("shouldn't be able to read an empty cell")
+
+    a = 12
+
 def test_func_doc():
     def f(): pass
     verify(f.__doc__ is None)
@@ -339,6 +350,7 @@ def test_im_name():
 
 def testmore():
     test_func_closure()
+    test_empty_cell()
     test_func_doc()
     test_func_globals()
     test_func_name()
index 645517a75fc7488feeff11962063c3f4130f6df5..f6da026c6dd732f20dae42748bcc849c48001900 100644 (file)
@@ -282,6 +282,8 @@ class CoverageResults:
             # skip some "files" we don't care about...
             if filename == "<string>":
                 continue
+            if filename.startswith("<doctest "):
+                continue
 
             if filename.endswith((".pyc", ".pyo")):
                 filename = filename[:-1]
index 55ea3b9662258c55c1c3454298ccde02dc80c198..018d68ceb2db3b3b857dad1146685858931b2edf 100644 (file)
@@ -7117,6 +7117,10 @@ all_ins(PyObject *d)
         /* Do not follow links.         */
         if (ins(d, "O_NOFOLLOW", (long)O_NOFOLLOW)) return -1;
 #endif
+#ifdef O_NOATIME
+       /* Do not update the access time. */
+       if (ins(d, "O_NOATIME", (long)O_NOATIME)) return -1;
+#endif
 
        /* These come from sysexits.h */
 #ifdef EX_OK
index 6794ff3c479916e6e5aeb6dcc6f0c9c83a6f0d72..49843663adab17a27908c2edbbe84f4ab0061d9d 100644 (file)
@@ -77,7 +77,12 @@ cell_clear(PyCellObject *op)
 static PyObject *
 cell_get_contents(PyCellObject *op, void *closure)
 {
-       Py_XINCREF(op->ob_ref);
+       if (op->ob_ref == NULL)
+       {
+               PyErr_SetString(PyExc_ValueError, "Cell is empty");
+               return NULL;
+       }
+       Py_INCREF(op->ob_ref);
        return op->ob_ref;
 }
 
index f3a282861a2fb3a49bca95848f17c291bde01e8a..da75975e4cf33e5d7e4ddaef394ee8c3d8348e50 100644 (file)
@@ -19,6 +19,7 @@
 struct compiling {
     char *c_encoding; /* source encoding */
     PyArena *c_arena; /* arena for allocating memeory */
+    const char *c_filename; /* filename */
 };
 
 static asdl_seq *seq_for_testlist(struct compiling *, const node *);
@@ -226,6 +227,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename,
         c.c_encoding = "utf-8";
     }
     c.c_arena = arena;
+    c.c_filename = filename;
 
     k = 0;
     switch (TYPE(n)) {