Issue #12079: Decimal(0).fma(Decimal('inf'), 'not a number') should give a TypeError, not a Decimal.InvalidOperation

This commit is contained in:
Mark Dickinson 2011-05-22 12:53:18 +01:00
parent 203bdb3028
commit b455e58b95
3 changed files with 16 additions and 1 deletions

View File

@ -1871,6 +1871,7 @@ class Decimal(object):
""" """
other = _convert_other(other, raiseit=True) other = _convert_other(other, raiseit=True)
third = _convert_other(third, raiseit=True)
# compute product; raise InvalidOperation if either operand is # compute product; raise InvalidOperation if either operand is
# a signaling NaN or if the product is zero times infinity. # 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)), str(int(self._int) * int(other._int)),
self._exp + other._exp) self._exp + other._exp)
third = _convert_other(third, raiseit=True)
return product.__add__(third, context) return product.__add__(third, context)
def _power_modulo(self, other, modulo, context=None): def _power_modulo(self, other, modulo, context=None):

View File

@ -1970,6 +1970,17 @@ class ContextAPItests(unittest.TestCase):
self.assertRaises(TypeError, c.fma, 2, '3', 4) self.assertRaises(TypeError, c.fma, 2, '3', 4)
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): def test_is_finite(self):
c = Context() c = Context()
d = c.is_finite(Decimal(10)) d = c.is_finite(Decimal(10))

View File

@ -153,6 +153,10 @@ Core and Builtins
Library 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 - Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore
to be able to unload the module. to be able to unload the module.