[Python-checkins] r74564 - in python/trunk: Lib/decimal.py Lib/test/decimaltestdata/extra.decTest Misc/NEWS
mark.dickinson
python-checkins at python.org
Fri Aug 28 15:25:03 CEST 2009
Author: mark.dickinson
Date: Fri Aug 28 15:25:02 2009
New Revision: 74564
Log:
Issue #6794: Fix handling of NaNs in Decimal.compare_total and
Decimal.compare_total_mag.
Modified:
python/trunk/Lib/decimal.py
python/trunk/Lib/test/decimaltestdata/extra.decTest
python/trunk/Misc/NEWS
Modified: python/trunk/Lib/decimal.py
==============================================================================
--- python/trunk/Lib/decimal.py (original)
+++ python/trunk/Lib/decimal.py Fri Aug 28 15:25:02 2009
@@ -2736,12 +2736,15 @@
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:
Modified: python/trunk/Lib/test/decimaltestdata/extra.decTest
==============================================================================
--- python/trunk/Lib/test/decimaltestdata/extra.decTest (original)
+++ python/trunk/Lib/test/decimaltestdata/extra.decTest Fri Aug 28 15:25:02 2009
@@ -154,6 +154,22 @@
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
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Fri Aug 28 15:25:02 2009
@@ -359,6 +359,9 @@
Library
-------
+- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
+ payloads are now ordered by integer value rather than lexicographically.
+
- Issue #6693: New functions in site.py to get user/global site packages paths.
- The thread.lock type now supports weak references.
More information about the Python-checkins
mailing list