@@ -436,7 +436,66 @@ def test_repr_roundtrip(self):
436436 self .assertFloatsAreIdentical (0.0 + z .imag ,
437437 0.0 + roundtrip .imag )
438438
439-
439+ def test_format (self ):
440+ # empty format string is same as str()
441+ self .assertEqual (format (1 + 3j , '' ), str (1 + 3j ))
442+ self .assertEqual (format (1.5 + 3.5j , '' ), str (1.5 + 3.5j ))
443+ self .assertEqual (format (3j , '' ), str (3j ))
444+ self .assertEqual (format (3.2j , '' ), str (3.2j ))
445+ self .assertEqual (format (3 + 0j , '' ), str (3 + 0j ))
446+ self .assertEqual (format (3.2 + 0j , '' ), str (3.2 + 0j ))
447+
448+ self .assertEqual (format (1 + 3j , 'g' ), '1+3j' )
449+ self .assertEqual (format (3j , 'g' ), '0+3j' )
450+ self .assertEqual (format (1.5 + 3.5j , 'g' ), '1.5+3.5j' )
451+
452+ self .assertEqual (format (1.5 + 3.5j , '+g' ), '+1.5+3.5j' )
453+ self .assertEqual (format (1.5 - 3.5j , '+g' ), '+1.5-3.5j' )
454+ self .assertEqual (format (1.5 - 3.5j , '-g' ), '1.5-3.5j' )
455+ self .assertEqual (format (1.5 + 3.5j , ' g' ), ' 1.5+3.5j' )
456+ self .assertEqual (format (1.5 - 3.5j , ' g' ), ' 1.5-3.5j' )
457+ self .assertEqual (format (- 1.5 + 3.5j , ' g' ), '-1.5+3.5j' )
458+ self .assertEqual (format (- 1.5 - 3.5j , ' g' ), '-1.5-3.5j' )
459+
460+ self .assertEqual (format (- 1.5 - 3.5e-20j , 'g' ), '-1.5-3.5e-20j' )
461+ self .assertEqual (format (- 1.5 - 3.5j , 'f' ), '-1.500000-3.500000j' )
462+ self .assertEqual (format (- 1.5 - 3.5j , 'F' ), '-1.500000-3.500000j' )
463+ self .assertEqual (format (- 1.5 - 3.5j , 'e' ), '-1.500000e+00-3.500000e+00j' )
464+ self .assertEqual (format (- 1.5 - 3.5j , '.2e' ), '-1.50e+00-3.50e+00j' )
465+ self .assertEqual (format (- 1.5 - 3.5j , '.2E' ), '-1.50E+00-3.50E+00j' )
466+ self .assertEqual (format (- 1.5e10 - 3.5e5j , '.2G' ), '-1.5E+10-3.5E+05j' )
467+
468+ self .assertEqual (format (1.5 + 3j , '<20g' ), '1.5+3j ' )
469+ self .assertEqual (format (1.5 + 3j , '*<20g' ), '1.5+3j**************' )
470+ self .assertEqual (format (1.5 + 3j , '>20g' ), ' 1.5+3j' )
471+ self .assertEqual (format (1.5 + 3j , '^20g' ), ' 1.5+3j ' )
472+ self .assertEqual (format (1.5 + 3j , '<20' ), '(1.5+3j) ' )
473+ self .assertEqual (format (1.5 + 3j , '>20' ), ' (1.5+3j)' )
474+ self .assertEqual (format (1.5 + 3j , '^20' ), ' (1.5+3j) ' )
475+ self .assertEqual (format (1.123 - 3.123j , '^20.2' ), ' (1.1-3.1j) ' )
476+
477+ self .assertEqual (format (1.5 + 3j , '<20.2f' ), '1.50+3.00j ' )
478+ self .assertEqual (format (1.5e20 + 3j , '<20.2f' ), '150000000000000000000.00+3.00j' )
479+ self .assertEqual (format (1.5e20 + 3j , '>40.2f' ), ' 150000000000000000000.00+3.00j' )
480+ self .assertEqual (format (1.5e20 + 3j , '^40,.2f' ), ' 150,000,000,000,000,000,000.00+3.00j ' )
481+ self .assertEqual (format (1.5e21 + 3j , '^40,.2f' ), ' 1,500,000,000,000,000,000,000.00+3.00j ' )
482+ self .assertEqual (format (1.5e21 + 3000j , ',.2f' ), '1,500,000,000,000,000,000,000.00+3,000.00j' )
483+
484+ # alternate is invalid
485+ self .assertRaises (ValueError , (1.5 + 0.5j ).__format__ , '#f' )
486+
487+ # zero padding is invalid
488+ self .assertRaises (ValueError , (1.5 + 0.5j ).__format__ , '010f' )
489+
490+ # '=' alignment is invalid
491+ self .assertRaises (ValueError , (1.5 + 3j ).__format__ , '=20' )
492+
493+ # integer presentation types are an error
494+ for t in 'bcdoxX' :
495+ self .assertRaises (ValueError , (1.5 + 0.5j ).__format__ , t )
496+
497+ # make sure everything works in ''.format()
498+ self .assertEqual ('*{0:.3f}*' .format (3.14159 + 2.71828j ), '*3.142+2.718j*' )
440499
441500def test_main ():
442501 support .run_unittest (ComplexTest )
0 commit comments