[pypy-svn] pypy default: Port CPython tests about complex.__format__
amauryfa
commits-noreply at bitbucket.org
Tue Feb 1 00:43:43 CET 2011
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch:
Changeset: r41508:bc9095fb2698
Date: 2011-02-01 00:09 +0100
http://bitbucket.org/pypy/pypy/changeset/bc9095fb2698/
Log: Port CPython tests about complex.__format__
diff --git a/pypy/objspace/std/test/test_complexobject.py b/pypy/objspace/std/test/test_complexobject.py
--- a/pypy/objspace/std/test/test_complexobject.py
+++ b/pypy/objspace/std/test/test_complexobject.py
@@ -438,3 +438,105 @@
def test_getnewargs(self):
assert (1+2j).__getnewargs__() == (1.0, 2.0)
+
+ def test_format(self):
+ # empty format string is same as str()
+ assert format(1+3j, '') == str(1+3j)
+ assert format(1.5+3.5j, '') == str(1.5+3.5j)
+ assert format(3j, '') == str(3j)
+ assert format(3.2j, '') == str(3.2j)
+ assert format(3+0j, '') == str(3+0j)
+ assert format(3.2+0j, '') == str(3.2+0j)
+
+ # empty presentation type should still be analogous to str,
+ # even when format string is nonempty (issue #5920).
+ assert format(3.2+0j, '-') == str(3.2+0j)
+ assert format(3.2+0j, '<') == str(3.2+0j)
+ z = 4/7. - 100j/7.
+ assert format(z, '') == str(z)
+ assert format(z, '-') == str(z)
+ assert format(z, '<') == str(z)
+ assert format(z, '10') == str(z)
+ z = complex(0.0, 3.0)
+ assert format(z, '') == str(z)
+ assert format(z, '-') == str(z)
+ assert format(z, '<') == str(z)
+ assert format(z, '2') == str(z)
+ z = complex(-0.0, 2.0)
+ assert format(z, '') == str(z)
+ assert format(z, '-') == str(z)
+ assert format(z, '<') == str(z)
+ assert format(z, '3') == str(z)
+
+ assert format(1+3j, 'g') == '1+3j'
+ assert format(3j, 'g') == '0+3j'
+ assert format(1.5+3.5j, 'g') == '1.5+3.5j'
+
+ assert format(1.5+3.5j, '+g') == '+1.5+3.5j'
+ assert format(1.5-3.5j, '+g') == '+1.5-3.5j'
+ assert format(1.5-3.5j, '-g') == '1.5-3.5j'
+ assert format(1.5+3.5j, ' g') == ' 1.5+3.5j'
+ assert format(1.5-3.5j, ' g') == ' 1.5-3.5j'
+ assert format(-1.5+3.5j, ' g') == '-1.5+3.5j'
+ assert format(-1.5-3.5j, ' g') == '-1.5-3.5j'
+
+ assert format(-1.5-3.5e-20j, 'g') == '-1.5-3.5e-20j'
+ assert format(-1.5-3.5j, 'f') == '-1.500000-3.500000j'
+ assert format(-1.5-3.5j, 'F') == '-1.500000-3.500000j'
+ assert format(-1.5-3.5j, 'e') == '-1.500000e+00-3.500000e+00j'
+ assert format(-1.5-3.5j, '.2e') == '-1.50e+00-3.50e+00j'
+ assert format(-1.5-3.5j, '.2E') == '-1.50E+00-3.50E+00j'
+ assert format(-1.5e10-3.5e5j, '.2G') == '-1.5E+10-3.5E+05j'
+
+ assert format(1.5+3j, '<20g') == '1.5+3j '
+ assert format(1.5+3j, '*<20g') == '1.5+3j**************'
+ assert format(1.5+3j, '>20g') == ' 1.5+3j'
+ assert format(1.5+3j, '^20g') == ' 1.5+3j '
+ assert format(1.5+3j, '<20') == '(1.5+3j) '
+ assert format(1.5+3j, '>20') == ' (1.5+3j)'
+ assert format(1.5+3j, '^20') == ' (1.5+3j) '
+ assert format(1.123-3.123j, '^20.2') == ' (1.1-3.1j) '
+
+ assert format(1.5+3j, '20.2f') == ' 1.50+3.00j'
+ assert format(1.5+3j, '>20.2f') == ' 1.50+3.00j'
+ assert format(1.5+3j, '<20.2f') == '1.50+3.00j '
+ assert format(1.5e20+3j, '<20.2f') == '150000000000000000000.00+3.00j'
+ assert format(1.5e20+3j, '>40.2f') == ' 150000000000000000000.00+3.00j'
+ assert format(1.5e20+3j, '^40,.2f') == ' 150,000,000,000,000,000,000.00+3.00j '
+ assert format(1.5e21+3j, '^40,.2f') == ' 1,500,000,000,000,000,000,000.00+3.00j '
+ assert format(1.5e21+3000j, ',.2f') == '1,500,000,000,000,000,000,000.00+3,000.00j'
+
+ # alternate is invalid
+ raises(ValueError, (1.5+0.5j).__format__, '#f')
+
+ # zero padding is invalid
+ raises(ValueError, (1.5+0.5j).__format__, '010f')
+
+ # '=' alignment is invalid
+ raises(ValueError, (1.5+3j).__format__, '=20')
+
+ # integer presentation types are an error
+ for t in 'bcdoxX':
+ raises(ValueError, (1.5+0.5j).__format__, t)
+
+ # make sure everything works in ''.format()
+ assert '*{0:.3f}*'.format(3.14159+2.71828j) == '*3.142+2.718j*'
+
+ # issue 3382: 'f' and 'F' with inf's and nan's
+ assert '{0:f}'.format(INF+0j) == 'inf+0.000000j'
+ assert '{0:F}'.format(INF+0j) == 'INF+0.000000j'
+ assert '{0:f}'.format(-INF+0j) == '-inf+0.000000j'
+ assert '{0:F}'.format(-INF+0j) == '-INF+0.000000j'
+ assert '{0:f}'.format(complex(INF, INF)) == 'inf+infj'
+ assert '{0:F}'.format(complex(INF, INF)) == 'INF+INFj'
+ assert '{0:f}'.format(complex(INF, -INF)) == 'inf-infj'
+ assert '{0:F}'.format(complex(INF, -INF)) == 'INF-INFj'
+ assert '{0:f}'.format(complex(-INF, INF)) == '-inf+infj'
+ assert '{0:F}'.format(complex(-INF, INF)) == '-INF+INFj'
+ assert '{0:f}'.format(complex(-INF, -INF)) == '-inf-infj'
+ assert '{0:F}'.format(complex(-INF, -INF)) == '-INF-INFj'
+
+ assert '{0:f}'.format(complex(NAN, 0)) == 'nan+0.000000j'
+ assert '{0:F}'.format(complex(NAN, 0)) == 'NAN+0.000000j'
+ assert '{0:f}'.format(complex(NAN, NAN)) == 'nan+nanj'
+ assert '{0:F}'.format(complex(NAN, NAN)) == 'NAN+NANj'
More information about the Pypy-commit
mailing list