mirror of
https://github.com/python/cpython
synced 2024-10-04 18:47:53 +00:00
Update assertComplexIdentical to handle nans correctly.
This commit is contained in:
parent
4ae5f138da
commit
a837aa6213
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue