mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #8748: Fix incorrect results from comparisons between an integer
and a complex instance. Based on a patch by Meador Inge.
This commit is contained in:
parent
4b3035d0b8
commit
4ca7c3c089
3 changed files with 80 additions and 11 deletions
|
@ -129,7 +129,7 @@ class ComplexTest(unittest.TestCase):
|
|||
self.assertTrue(a < 2.0j)
|
||||
|
||||
def test_richcompare(self):
|
||||
self.assertRaises(OverflowError, complex.__eq__, 1+1j, 1L<<10000)
|
||||
self.assertEqual(complex.__eq__(1+1j, 1L<<10000), False)
|
||||
self.assertEqual(complex.__lt__(1+1j, None), NotImplemented)
|
||||
self.assertIs(complex.__eq__(1+1j, 1+1j), True)
|
||||
self.assertIs(complex.__eq__(1+1j, 2+2j), False)
|
||||
|
@ -140,6 +140,23 @@ class ComplexTest(unittest.TestCase):
|
|||
self.assertRaises(TypeError, complex.__gt__, 1+1j, 2+2j)
|
||||
self.assertRaises(TypeError, complex.__ge__, 1+1j, 2+2j)
|
||||
|
||||
def test_richcompare_boundaries(self):
|
||||
def check(n, deltas, is_equal, imag = 0.0):
|
||||
for delta in deltas:
|
||||
i = n + delta
|
||||
z = complex(i, imag)
|
||||
self.assertIs(complex.__eq__(z, i), is_equal(delta))
|
||||
self.assertIs(complex.__ne__(z, i), not is_equal(delta))
|
||||
# For IEEE-754 doubles the following should hold:
|
||||
# x in [2 ** (52 + i), 2 ** (53 + i + 1)] -> x mod 2 ** i == 0
|
||||
# where the interval is representable, of course.
|
||||
for i in range(1, 10):
|
||||
pow = 52 + i
|
||||
mult = 2 ** i
|
||||
check(2 ** pow, range(1, 101), lambda delta: delta % mult == 0)
|
||||
check(2 ** pow, range(1, 101), lambda delta: False, float(i))
|
||||
check(2 ** 53, range(-100, 0), lambda delta: True)
|
||||
|
||||
def test_mod(self):
|
||||
self.assertRaises(ZeroDivisionError, (1+1j).__mod__, 0+0j)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue