summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Dickinson <mdickinson@enthought.com>2011-05-22 11:53:18 (GMT)
committerMark Dickinson <mdickinson@enthought.com>2011-05-22 11:53:18 (GMT)
commitb455e58b95a6603f8464f6de4474c160a8f83047 (patch)
treec71a40a0a4815f88ef2001782dadc67f5c0505ac
parent203bdb3028574fb45caae44bbb9275d9a6aa2795 (diff)
downloadcpython-b455e58b95a6603f8464f6de4474c160a8f83047.zip
cpython-b455e58b95a6603f8464f6de4474c160a8f83047.tar.gz
cpython-b455e58b95a6603f8464f6de4474c160a8f83047.tar.bz2
Issue #12079: Decimal(0).fma(Decimal('inf'), 'not a number') should give a TypeError, not a Decimal.InvalidOperation
-rw-r--r--Lib/decimal.py2
-rw-r--r--Lib/test/test_decimal.py11
-rw-r--r--Misc/NEWS4
3 files changed, 16 insertions, 1 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py
index f5277c5..1b11b10 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -1871,6 +1871,7 @@ class Decimal(object):
"""
other = _convert_other(other, raiseit=True)
+ third = _convert_other(third, raiseit=True)
# compute product; raise InvalidOperation if either operand is
# a signaling NaN or if the product is zero times infinity.
@@ -1900,7 +1901,6 @@ class Decimal(object):
str(int(self._int) * int(other._int)),
self._exp + other._exp)
- third = _convert_other(third, raiseit=True)
return product.__add__(third, context)
def _power_modulo(self, other, modulo, context=None):
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index e46cd91..96bbafe 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -1970,6 +1970,17 @@ class ContextAPItests(unittest.TestCase):
self.assertRaises(TypeError, c.fma, 2, '3', 4)
self.assertRaises(TypeError, c.fma, 2, 3, '4')
+ # Issue 12079 for Context.fma ...
+ self.assertRaises(TypeError, c.fma,
+ Decimal('Infinity'), Decimal(0), "not a decimal")
+ self.assertRaises(TypeError, c.fma,
+ Decimal(1), Decimal('snan'), 1.222)
+ # ... and for Decimal.fma.
+ self.assertRaises(TypeError, Decimal('Infinity').fma,
+ Decimal(0), "not a decimal")
+ self.assertRaises(TypeError, Decimal(1).fma,
+ Decimal('snan'), 1.222)
+
def test_is_finite(self):
c = Context()
d = c.is_finite(Decimal(10))
diff --git a/Misc/NEWS b/Misc/NEWS
index 874f248..b341653 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -153,6 +153,10 @@ Core and Builtins
Library
-------
+- Issue #12079: Decimal('Infinity').fma(Decimal('0'), (3.91224318126786e+19+0j))
+ now raises TypeError (reflecting the invalid type of the 3rd argument) rather
+ than Decimal.InvalidOperation.
+
- Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore
to be able to unload the module.