8000 More tests for complex_add/sub/neg() · skirpichev/cpython@3808d5f · GitHub
[go: up one dir, main page]

Skip to content

Commit 3808d5f

Browse files
committed
More tests for complex_add/sub/neg()
Partially from python#109642
1 parent bafdc6f commit 3808d5f

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

Lib/test/test_complex.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ def assertFloatsAreIdentical(self, x, y):
7272
msg += ': zeros have different signs'
7373
self.fail(msg.format(x, y))
7474

75+
def assertComplexesAreIdentical(self, x, y):
76+
self.assertEqual((x.real, copysign(1.0, x.real),
77+
x.imag, copysign(1.0, x.imag)),
78+
(y.real, copysign(1.0, y.real),
79+
y.imag, copysign(1.0, y.imag)))
80+
7581
def assertClose(self, x, y, eps=1e-9):
7682
"""Return true iff complexes x and y "are close"."""
7783
self.assertCloseAbs(x.real, y.real, eps)
@@ -180,6 +186,52 @@ def check(n, deltas, is_equal, imag = 0.0):
180186
check(2 ** pow, range(1, 101), lambda delta: False, float(i))
181187
check(2 ** 53, range(-100, 0), lambda delta: True)
182188

189+
def test_add(self):
190+
self.assertAlmostEqual(1j + 1, complex(+1, 1))
191+
self.assertAlmostEqual(1j + (-1), complex(-1, 1))
192+
self.assertRaises(OverflowError, operator.add, 1j, 10**1000)
193+
self.assertRaises(TypeError, operator.add, 1j, None)
194+
self.assertRaises(TypeError, operator.add, None, 1j)
195+
196+
self.assertComplexesAreIdentical(0.0 + 0j, complex(0, 0))
197+
self.assertComplexesAreIdentical(0j + 0.0, complex(0, 0))
198+
self.assertComplexesAreIdentical(-0.0 + 0j, complex(-0.0, 0))
199+
self.assertComplexesAreIdentical(0j + (-0.0), complex(-0.0, 0))
200+
self.assertComplexesAreIdentical((-0.0+0j) + 0.0, complex(0, 0))
201+
self.assertComplexesAreIdentical(0.0 + (-0.0+0j), complex(0, 0))
202+
self.assertComplexesAreIdentical((1+0j) + (1-0j), complex(2, 0))
203+
self.assertComplexesAreIdentical(0j + (-0.0-0j), complex(-0.0, 0))
204+
self.assertComplexesAreIdentical(0j + (-0j), complex(0, 0))
205+
self.assertComplexesAreIdentical((1+0j) + (-0.0-0j), complex(1, 0))
206+
self.assertComplexesAreIdentical((-0.0+0j) + (-0j), complex(-0.0, 0))
207+
self.assertComplexesAreIdentical((1+0j) + 1, complex(2, 0))
208+
self.assertComplexesAreIdentical(1 + (1+0j), complex(2, 0))
209+
self.assertComplexesAreIdentical((1-0j) + 1, complex(2, -0.0))
210+
self.assertComplexesAreIdentical(1 + (1-0j), complex(2, -0.0))
211+
212+
def test_sub(self):
213+
self.assertAlmostEqual(1j - 1, complex(-1, 1))
214+
self.assertAlmostEqual(1j - (-1), complex(1, 1))
215+
self.assertRaises(OverflowError, operator.sub, 1j, 10**1000)
216+
self.assertRaises(TypeError, operator.sub, 1j, None)
217+
self.assertRaises(TypeError, operator.sub, None, 1j)
218+
219+
self.assertComplexesAreIdentical(0.0 - 0j, complex(0, -0.0))
220+
self.assertComplexesAreIdentical(0j - 0.0, complex(-0.0, 0))
221+
self.assertComplexesAreIdentical(-0.0 - 0j, complex(-0.0, -0.0))
222+
self.assertComplexesAreIdentical(0j - (-0.0), complex(0, 0))
223+
self.assertComplexesAreIdentical((-0.0+0j) - 0.0, complex(-0.0, 0))
224+
self.assertComplexesAreIdentical(0.0 - (-0.0+0j), complex(0, -0.0))
225+
self.assertComplexesAreIdentical((1+0j) - (1-0j), complex(0, 0))
226+
self.assertComplexesAreIdentical(0j - (-0.0-0j), complex(0, 0))
227+
self.assertComplexesAreIdentical(0j - (-0j), complex(-0.0, 0))
228+
self.assertComplexesAreIdentical((1+0j) - (-0.0-0j), complex(1, 0))
229+
self.assertComplexesAreIdentical((-0.0+0j) - (-0j), complex(-0.0, 0))
230+
self.assertComplexesAreIdentical((1+0j) - 1, complex(0, 0))
231+
self.assertComplexesAreIdentical(1 - (1+0j), complex(0, -0.0))
232+
self.assertComplexesAreIdentical((1-0j) - 1, complex(0, -0.0))
233+
self.assertComplexesAreIdentical(1 - (1-0j), complex(0, 0))
234+
183235
def test_mod(self):
184236
# % is no longer supported on complex numbers
185237
with self.assertRaises(TypeError):
@@ -604,6 +656,8 @@ def test(v, expected, test_fn=self.assertEqual):
604656

605657
def test_neg(self):
606658
self.assertEqual(-(1+6j), -1-6j)
659+
self.assertComplexesAreIdentical(-0j, complex(0, -0.0))
660+
self.assertComplexesAreIdentical(-(-0.0+0j), complex(0, -0.0))
607661

608662
def test_getnewargs(self):
609663
self.assertEqual((1+2j).__getnewargs__(), (1.0, 2.0))

0 commit comments

Comments
 (0)
0