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): ...@@ -62,11 +62,38 @@ class CMathTests(unittest.TestCase):
def tearDown(self): def tearDown(self):
self.test_values.close() self.test_values.close()
def assertComplexIdentical(self, a, b): def assertFloatIdentical(self, x, y):
"""Fail if two complex numbers value or sign is different.""" """Fail unless floats x and y are identical, in the sense that:
self.assertEqual(a, b) (1) both x and y are nans, or
self.assertEqual(math.copysign(1., a.real), math.copysign(1., b.real)) (2) both x and y are infinities, with the same sign, or
self.assertEqual(math.copysign(1., a.imag), math.copysign(1., b.imag)) (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, def rAssertAlmostEqual(self, a, b, rel_err = 2e-15, abs_err = 5e-323,
msg=None): 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