Kaydet (Commit) a837aa62 authored tarafından Mark Dickinson's avatar Mark Dickinson

Update assertComplexIdentical to handle nans correctly.

üst 4ae5f138
......@@ -62,11 +62,38 @@ class CMathTests(unittest.TestCase):
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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment