summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2009-08-28 13:44:35 +0000
committerMark Dickinson <dickinsm@gmail.com>2009-08-28 13:44:35 +0000
commit28fa1df5f170c125f26e6f56ba67c7485ba4c8c9 (patch)
tree75fffe62a022210bef2e1337fba6184ccf4bf44d
parent5d5d048c4f955e67935cb3fe61993f87394c8934 (diff)
downloadcpython-28fa1df5f170c125f26e6f56ba67c7485ba4c8c9.tar.gz
Merged revisions 74566 via svnmerge from
svn+ssh://pythondev@www.python.org/python/branches/py3k ................ r74566 | mark.dickinson | 2009-08-28 14:39:53 +0100 (Fri, 28 Aug 2009) | 10 lines Merged revisions 74564 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74564 | mark.dickinson | 2009-08-28 14:25:02 +0100 (Fri, 28 Aug 2009) | 3 lines Issue #6794: Fix handling of NaNs in Decimal.compare_total and Decimal.compare_total_mag. ........ ................
-rw-r--r--Lib/decimal.py7
-rw-r--r--Lib/test/decimaltestdata/extra.decTest16
-rw-r--r--Misc/NEWS3
3 files changed, 24 insertions, 2 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index 042dd8bd85..8d82cb9f57 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -2819,12 +2819,15 @@ class Decimal(object):
other_nan = other._isnan()
if self_nan or other_nan:
if self_nan == other_nan:
- if self._int < other._int:
+ # compare payloads as though they're integers
+ self_key = len(self._int), self._int
+ other_key = len(other._int), other._int
+ if self_key < other_key:
if sign:
return _One
else:
return _NegativeOne
- if self._int > other._int:
+ if self_key > other_key:
if sign:
return _NegativeOne
else:
diff --git a/Lib/test/decimaltestdata/extra.decTest b/Lib/test/decimaltestdata/extra.decTest
index 2e3fce8558..1d6ea3702a 100644
--- a/Lib/test/decimaltestdata/extra.decTest
+++ b/Lib/test/decimaltestdata/extra.decTest
@@ -154,6 +154,22 @@ extr1301 fma Inf 0 sNaN456 -> NaN Invalid_operation
extr1302 fma 0E123 -Inf sNaN789 -> NaN Invalid_operation
extr1302 fma -Inf 0E-456 sNaN148 -> NaN Invalid_operation
+-- Issue #6794: when comparing NaNs using compare_total, payloads
+-- should be compared as though positive integers; not
+-- lexicographically as strings.
+extr1400 comparetotal NaN123 NaN45 -> 1
+extr1401 comparetotal sNaN123 sNaN45 -> 1
+extr1402 comparetotal -NaN123 -NaN45 -> -1
+extr1403 comparetotal -sNaN123 -sNaN45 -> -1
+extr1404 comparetotal NaN45 NaN123 -> -1
+extr1405 comparetotal sNaN45 sNaN123 -> -1
+extr1406 comparetotal -NaN45 -NaN123 -> 1
+extr1407 comparetotal -sNaN45 -sNaN123 -> 1
+
+extr1410 comparetotal -sNaN63450748854172416 -sNaN911993 -> -1
+extr1411 comparetotmag NaN1222222222222 -NaN999999 -> 1
+
+
-- max/min/max_mag/min_mag bug in 2.5.2/2.6/3.0: max(NaN, finite) gave
-- incorrect answers when the finite number required rounding; similarly
-- for the other thre functions
diff --git a/Misc/NEWS b/Misc/NEWS
index 099f73a116..da8cdf500c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -47,6 +47,9 @@ C-API
Library
-------
+- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
+ payloads are now ordered by integer value rather than lexicographically.
+
- Issue #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT
DO/DONT correctly.