diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2009-08-28 13:39:53 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2009-08-28 13:39:53 (GMT) |
commit | d314e1b9291544640a9a85542b335d692a9576b6 (patch) | |
tree | 1c082ddf5ad058e645bba31866ff3c360444e159 /Lib | |
parent | 5e129dbc169363f286f8644edf8bf7c965869f72 (diff) | |
download | cpython-d314e1b9291544640a9a85542b335d692a9576b6.zip cpython-d314e1b9291544640a9a85542b335d692a9576b6.tar.gz cpython-d314e1b9291544640a9a85542b335d692a9576b6.tar.bz2 |
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.
........
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/decimal.py | 7 | ||||
-rw-r--r-- | Lib/test/decimaltestdata/extra.decTest | 16 |
2 files changed, 21 insertions, 2 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py index 042dd8b..8d82cb9 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 2e3fce8..1d6ea37 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 |