@@ -72,6 +72,12 @@ def assertFloatsAreIdentical(self, x, y):
72
72
msg += ': zeros have different signs'
73
73
self .fail (msg .format (x , y ))
74
74
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
+
75
81
def assertClose (self , x , y , eps = 1e-9 ):
76
82
"""Return true iff complexes x and y "are close"."""
77
83
self .assertCloseAbs (x .real , y .real , eps )
@@ -180,6 +186,52 @@ def check(n, deltas, is_equal, imag = 0.0):
180
186
check (2 ** pow , range (1 , 101 ), lambda delta : False , float (i ))
181
187
check (2 ** 53 , range (- 100 , 0 ), lambda delta : True )
182
188
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
+
183
235
def test_mod (self ):
184
236
# % is no longer supported on complex numbers
185
237
with self .assertRaises (TypeError ):
@@ -604,6 +656,8 @@ def test(v, expected, test_fn=self.assertEqual):
604
656
605
657
def test_neg (self ):
606
658
self .assertEqual (- (1 + 6j ), - 1 - 6j )
659
+ self .assertComplexesAreIdentical (- 0j , complex (0 , - 0.0 ))
660
+ self .assertComplexesAreIdentical (- (- 0.0 + 0j ), complex (0 , - 0.0 ))
607
661
608
662
def test_getnewargs (self ):
609
663
self .assertEqual ((1 + 2j ).__getnewargs__ (), (1.0 , 2.0 ))
0 commit comments