@@ -220,6 +220,7 @@ def test_boolcontext(self):
220220 def test_conjugate (self ):
221221 self .assertClose (complex (5.3 , 9.8 ).conjugate (), 5.3 - 9.8j )
222222
223+ @unittest .skipIf (test_support .is_jython , "FIXME: not working in Jython" )
223224 def test_constructor (self ):
224225 class OS :
225226 def __init__ (self , value ): self .value = value
@@ -232,6 +233,188 @@ def __complex__(self): return self.value
232233 self .assertRaises (TypeError , complex , OS (None ))
233234 self .assertRaises (TypeError , complex , NS (None ))
234235
236+ self .assertAlmostEqual (complex ("1+10j" ), 1 + 10j )
237+ self .assertAlmostEqual (complex (10 ), 10 + 0j )
238+ self .assertAlmostEqual (complex (10.0 ), 10 + 0j )
239+ self .assertAlmostEqual (complex (10L ), 10 + 0j )
240+ self .assertAlmostEqual (complex (10 + 0j ), 10 + 0j )
241+ self .assertAlmostEqual (complex (1 ,10 ), 1 + 10j )
242+ self .assertAlmostEqual (complex (1 ,10L ), 1 + 10j )
243+ self .assertAlmostEqual (complex (1 ,10.0 ), 1 + 10j )
244+ self .assertAlmostEqual (complex (1L ,10 ), 1 + 10j )
245+ self .assertAlmostEqual (complex (1L ,10L ), 1 + 10j )
246+ self .assertAlmostEqual (complex (1L ,10.0 ), 1 + 10j )
247+ self .assertAlmostEqual (complex (1.0 ,10 ), 1 + 10j )
248+ self .assertAlmostEqual (complex (1.0 ,10L ), 1 + 10j )
249+ self .assertAlmostEqual (complex (1.0 ,10.0 ), 1 + 10j )
250+ self .assertAlmostEqual (complex (3.14 + 0j ), 3.14 + 0j )
251+ self .assertAlmostEqual (complex (3.14 ), 3.14 + 0j )
252+ self .assertAlmostEqual (complex (314 ), 314.0 + 0j )
253+ self .assertAlmostEqual (complex (314L ), 314.0 + 0j )
254+ self .assertAlmostEqual (complex (3.14 + 0j , 0j ), 3.14 + 0j )
255+ self .assertAlmostEqual (complex (3.14 , 0.0 ), 3.14 + 0j )
256+ self .assertAlmostEqual (complex (314 , 0 ), 314.0 + 0j )
257+ self .assertAlmostEqual (complex (314L , 0L ), 314.0 + 0j )
258+ self .assertAlmostEqual (complex (0j , 3.14j ), - 3.14 + 0j )
259+ self .assertAlmostEqual (complex (0.0 , 3.14j ), - 3.14 + 0j )
260+ self .assertAlmostEqual (complex (0j , 3.14 ), 3.14j )
261+ self .assertAlmostEqual (complex (0.0 , 3.14 ), 3.14j )
262+ self .assertAlmostEqual (complex ("1" ), 1 + 0j )
263+ self .assertAlmostEqual (complex ("1j" ), 1j )
264+ self .assertAlmostEqual (complex (), 0 )
265+ self .assertAlmostEqual (complex ("-1" ), - 1 )
266+ self .assertAlmostEqual (complex ("+1" ), + 1 )
267+ #FIXME: these are not working in Jython.
268+ self .assertAlmostEqual (complex ("(1+2j)" ), 1 + 2j )
269+ self .assertAlmostEqual (complex ("(1.3+2.2j)" ), 1.3 + 2.2j )
270+ # ]
271+ self .assertAlmostEqual (complex ("3.14+1J" ), 3.14 + 1j )
272+ #FIXME: these are not working in Jython.
273+ self .assertAlmostEqual (complex (" ( +3.14-6J )" ), 3.14 - 6j )
274+ self .assertAlmostEqual (complex (" ( +3.14-J )" ), 3.14 - 1j )
275+ self .assertAlmostEqual (complex (" ( +3.14+j )" ), 3.14 + 1j )
276+ # ]
277+ self .assertAlmostEqual (complex ("J" ), 1j )
278+ #FIXME: this is not working in Jython.
279+ self .assertAlmostEqual (complex ("( j )" ), 1j )
280+ # ]
281+ self .assertAlmostEqual (complex ("+J" ), 1j )
282+ #FIXME: this is not working in Jython.
283+ self .assertAlmostEqual (complex ("( -j)" ), - 1j )
284+ # ]
285+ self .assertAlmostEqual (complex ('1e-500' ), 0.0 + 0.0j )
286+ self .assertAlmostEqual (complex ('-1e-500j' ), 0.0 - 0.0j )
287+ self .assertAlmostEqual (complex ('-1e-500+1e-500j' ), - 0.0 + 0.0j )
288+
289+ class complex2 (complex ): pass
290+ self .assertAlmostEqual (complex (complex2 (1 + 1j )), 1 + 1j )
291+ self .assertAlmostEqual (complex (real = 17 , imag = 23 ), 17 + 23j )
292+ self .assertAlmostEqual (complex (real = 17 + 23j ), 17 + 23j )
293+ self .assertAlmostEqual (complex (real = 17 + 23j , imag = 23 ), 17 + 46j )
294+ self .assertAlmostEqual (complex (real = 1 + 2j , imag = 3 + 4j ), - 3 + 5j )
295+
296+ # check that the sign of a zero in the real or imaginary part
297+ # is preserved when constructing from two floats. (These checks
298+ # are harmless on systems without support for signed zeros.)
299+ def split_zeros (x ):
300+ """Function that produces different results for 0. and -0."""
301+ return atan2 (x , - 1. )
302+
303+ self .assertEqual (split_zeros (complex (1. , 0. ).imag ), split_zeros (0. ))
304+ #FIXME: this is not working in Jython.
305+ self .assertEqual (split_zeros (complex (1. , - 0. ).imag ), split_zeros (- 0. ))
306+ # ]
307+ self .assertEqual (split_zeros (complex (0. , 1. ).real ), split_zeros (0. ))
308+ self .assertEqual (split_zeros (complex (- 0. , 1. ).real ), split_zeros (- 0. ))
309+
310+ c = 3.14 + 1j
311+ self .assertTrue (complex (c ) is c )
312+ del c
313+
314+ self .assertRaises (TypeError , complex , "1" , "1" )
315+ self .assertRaises (TypeError , complex , 1 , "1" )
316+
317+ if test_support .have_unicode :
318+ self .assertEqual (complex (unicode (" 3.14+J " )), 3.14 + 1j )
319+
320+ # SF bug 543840: complex(string) accepts strings with \0
321+ # Fixed in 2.3.
322+ self .assertRaises (ValueError , complex , '1+1j\0 j' )
323+
324+ self .assertRaises (TypeError , int , 5 + 3j )
325+ self .assertRaises (TypeError , long , 5 + 3j )
326+ self .assertRaises (TypeError , float , 5 + 3j )
327+ self .assertRaises (ValueError , complex , "" )
328+ self .assertRaises (TypeError , complex , None )
329+ self .assertRaises (ValueError , complex , "\0 " )
330+ self .assertRaises (ValueError , complex , "3\09 " )
331+ self .assertRaises (TypeError , complex , "1" , "2" )
332+ self .assertRaises (TypeError , complex , "1" , 42 )
333+ self .assertRaises (TypeError , complex , 1 , "2" )
334+ self .assertRaises (ValueError , complex , "1+" )
335+ self .assertRaises (ValueError , complex , "1+1j+1j" )
336+ self .assertRaises (ValueError , complex , "--" )
337+ self .assertRaises (ValueError , complex , "(1+2j" )
338+ self .assertRaises (ValueError , complex , "1+2j)" )
339+ self .assertRaises (ValueError , complex , "1+(2j)" )
340+ self .assertRaises (ValueError , complex , "(1+2j)123" )
341+ if test_support .have_unicode :
342+ self .assertRaises (ValueError , complex , unicode ("x" ))
343+ #FIXME: these are raising wrong errors in Jython.
344+ self .assertRaises (ValueError , complex , "1j+2" )
345+ self .assertRaises (ValueError , complex , "1e1ej" )
346+ self .assertRaises (ValueError , complex , "1e++1ej" )
347+ self .assertRaises (ValueError , complex , ")1+2j(" )
348+ # ]
349+
350+ # the following three are accepted by Python 2.6
351+ #FIXME: these are raising wrong errors in Jython.
352+ self .assertRaises (ValueError , complex , "1..1j" )
353+ self .assertRaises (ValueError , complex , "1.11.1j" )
354+ self .assertRaises (ValueError , complex , "1e1.1j" )
355+ # ]
356+
357+ #FIXME: not working in Jython.
358+ if test_support .have_unicode :
359+ # check that complex accepts long unicode strings
360+ self .assertEqual (type (complex (unicode ("1" * 500 ))), complex )
361+ # ]
362+
363+ class EvilExc (Exception ):
364+ pass
365+
366+ class evilcomplex :
367+ def __complex__ (self ):
368+ raise EvilExc
369+
370+ self .assertRaises (EvilExc , complex , evilcomplex ())
371+
372+ class float2 :
373+ def __init__ (self , value ):
374+ self .value = value
375+ def __float__ (self ):
376+ return self .value
377+
378+ self .assertAlmostEqual (complex (float2 (42. )), 42 )
379+ self .assertAlmostEqual (complex (real = float2 (17. ), imag = float2 (23. )), 17 + 23j )
380+ self .assertRaises (TypeError , complex , float2 (None ))
381+
382+ class complex0 (complex ):
383+ """Test usage of __complex__() when inheriting from 'complex'"""
384+ def __complex__ (self ):
385+ return 42j
386+
387+ class complex1 (complex ):
388+ """Test usage of __complex__() with a __new__() method"""
389+ def __new__ (self , value = 0j ):
390+ return complex .__new__ (self , 2 * value )
391+ def __complex__ (self ):
392+ return self
393+
394+ class complex2 (complex ):
395+ """Make sure that __complex__() calls fail if anything other than a
396+ complex is returned"""
397+ def __complex__ (self ):
398+ return None
399+
400+ self .assertAlmostEqual (complex (complex0 (1j )), 42j )
401+ self .assertAlmostEqual (complex (complex1 (1j )), 2j )
402+ self .assertRaises (TypeError , complex , complex2 (1j ))
403+
404+ def test_constructor_jy (self ):
405+ # These are the parts of test_constructor that work in Jython.
406+ # Delete this test when test_constructor skip is removed.
407+ class OS :
408+ def __init__ (self , value ): self .value = value
409+ def __complex__ (self ): return self .value
410+ class NS (object ):
411+ def __init__ (self , value ): self .value = value
412+ def __complex__ (self ): return self .value
413+ self .assertEqual (complex (OS (1 + 10j )), 1 + 10j )
414+ self .assertEqual (complex (NS (1 + 10j )), 1 + 10j )
415+ self .assertRaises (TypeError , complex , OS (None ))
416+ self .assertRaises (TypeError , complex , NS (None ))
417+
235418 self .assertAlmostEqual (complex ("1+10j" ), 1 + 10j )
236419 self .assertAlmostEqual (complex (10 ), 10 + 0j )
237420 self .assertAlmostEqual (complex (10.0 ), 10 + 0j )
@@ -458,7 +641,7 @@ def test_abs(self):
458641 for num in nums :
459642 self .assertAlmostEqual ((num .real ** 2 + num .imag ** 2 ) ** 0.5 , abs (num ))
460643
461- @unittest .skipIf (test_support .is_jython , "FIXME: not working in Jython" )
644+ @unittest .skipIf (test_support .is_jython , "FIXME: str.__complex__ not working in Jython" )
462645 def test_repr (self ):
463646 self .assertEqual (repr (1 + 6j ), '(1+6j)' )
464647 self .assertEqual (repr (1 - 6j ), '(1-6j)' )
@@ -482,6 +665,32 @@ def test_repr(self):
482665 self .assertEqual (repr (complex (0 , - INF )), "-infj" )
483666 self .assertEqual (repr (complex (0 , NAN )), "nanj" )
484667
668+ def test_repr_jy (self ):
669+ # These are just the cases that Jython can do from test_repr
670+ # Delete this test when test_repr passes
671+ self .assertEqual (repr (1 + 6j ), '(1+6j)' )
672+ self .assertEqual (repr (1 - 6j ), '(1-6j)' )
673+
674+ self .assertNotEqual (repr (- (1 + 0j )), '(-1+-0j)' )
675+
676+ # Fails to round-trip:
677+ # self.assertEqual(1-6j,complex(repr(1-6j)))
678+ # self.assertEqual(1+6j,complex(repr(1+6j)))
679+ # self.assertEqual(-6j,complex(repr(-6j)))
680+ # self.assertEqual(6j,complex(repr(6j)))
681+
682+ self .assertEqual (repr (complex (1. , INF )), "(1+infj)" )
683+ self .assertEqual (repr (complex (1. , - INF )), "(1-infj)" )
684+ self .assertEqual (repr (complex (INF , 1 )), "(inf+1j)" )
685+ self .assertEqual (repr (complex (- INF , INF )), "(-inf+infj)" )
686+ self .assertEqual (repr (complex (NAN , 1 )), "(nan+1j)" )
687+ self .assertEqual (repr (complex (1 , NAN )), "(1+nanj)" )
688+ self .assertEqual (repr (complex (NAN , NAN )), "(nan+nanj)" )
689+
690+ self .assertEqual (repr (complex (0 , INF )), "infj" )
691+ self .assertEqual (repr (complex (0 , - INF )), "-infj" )
692+ self .assertEqual (repr (complex (0 , NAN )), "nanj" )
693+
485694 def test_neg (self ):
486695 self .assertEqual (- (1 + 6j ), - 1 - 6j )
487696
@@ -501,7 +710,6 @@ def test_file(self):
501710 fo .close ()
502711 test_support .unlink (test_support .TESTFN )
503712
504- @unittest .skipIf (test_support .is_jython , "FIXME: not working in Jython" )
505713 def test_getnewargs (self ):
506714 self .assertEqual ((1 + 2j ).__getnewargs__ (), (1.0 , 2.0 ))
507715 self .assertEqual ((1 - 2j ).__getnewargs__ (), (1.0 , - 2.0 ))
@@ -557,7 +765,6 @@ def test_repr_roundtrip(self):
557765 self .assertFloatsAreIdentical (0.0 + z .imag ,
558766 0.0 + roundtrip .imag )
559767
560- @unittest .skipIf (test_support .is_jython , "FIXME: not working in Jython" )
561768 def test_format (self ):
562769 # empty format string is same as str()
563770 self .assertEqual (format (1 + 3j , '' ), str (1 + 3j ))
0 commit comments