[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