Update assertComplexIdentical to handle nans correctly.

This commit is contained in:
Mark Dickinson 2010-11-07 15:31:41 +00:00
parent 4ae5f138da
commit a837aa6213

View file

@ -62,11 +62,38 @@ def setUp(self):
def tearDown(self):
self.test_values.close()
def assertComplexIdentical(self, a, b):
"""Fail if two complex numbers value or sign is different."""
self.assertEqual(a, b)
self.assertEqual(math.copysign(1., a.real), math.copysign(1., b.real))
self.assertEqual(math.copysign(1., a.imag), math.copysign(1., b.imag))
def assertFloatIdentical(self, x, y):
"""Fail unless floats x and y are identical, in the sense that:
(1) both x and y are nans, or
(2) both x and y are infinities, with the same sign, or
(3) both x and y are zeros, with the same sign, or
(4) x and y are both finite and nonzero, and x == y
"""
msg = 'floats {!r} and {!r} are not identical'
if math.isnan(x) or math.isnan(y):
if math.isnan(x) and math.isnan(y):
return
elif x == y:
if x != 0.0:
return
# both zero; check that signs match
elif math.copysign(1.0, x) == math.copysign(1.0, y):
return
else:
msg += ': zeros have different signs'
self.fail(msg.format(x, y))
def assertComplexIdentical(self, x, y):
"""Fail unless complex numbers x and y have equal values and signs.
In particular, if x and y both have real (or imaginary) part
zero, but the zeros have different signs, this test will fail.
"""
self.assertFloatIdentical(x.real, y.real)
self.assertFloatIdentical(x.imag, y.imag)
def rAssertAlmostEqual(self, a, b, rel_err = 2e-15, abs_err = 5e-323,
msg=None):