test_format.py revision fff53250789c3879e5f63d4dde80d17e0b9c4dbb
1from test_support import verbose 2import sys 3 4# test string formatting operator (I am not sure if this is being tested 5# elsewhere but, surely, some of the given cases are *not* tested because 6# they crash python) 7# test on unicode strings as well 8 9overflowok = 1 10 11def testformat(formatstr, args, output=None): 12 if verbose: 13 if output: 14 print "%s %% %s =? %s ..." %\ 15 (repr(formatstr), repr(args), repr(output)), 16 else: 17 print "%s %% %s works? ..." % (repr(formatstr), repr(args)), 18 try: 19 result = formatstr % args 20 except OverflowError: 21 if not overflowok: 22 raise 23 if verbose: 24 print 'overflow (this is fine)' 25 else: 26 if output and result != output: 27 if verbose: 28 print 'no' 29 print "%s %% %s == %s != %s" %\ 30 (repr(formatstr), repr(args), repr(result), repr(output)) 31 else: 32 if verbose: 33 print 'yes' 34 35def testboth(formatstr, *args): 36 testformat(formatstr, *args) 37 testformat(unicode(formatstr), *args) 38 39 40testboth("%.1d", (1,), "1") 41testboth("%.*d", (sys.maxint,1)) # expect overflow 42testboth("%.100d", (1,), '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001') 43testboth("%#.117x", (1,), '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001') 44testboth("%#.118x", (1,), '0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001') 45 46testboth("%f", (1.0,), "1.000000") 47# these are trying to test the limits of the internal magic-number-length 48# formatting buffer, if that number changes then these tests are less 49# effective 50testboth("%#.*g", (109, -1.e+49/3.)) 51testboth("%#.*g", (110, -1.e+49/3.)) 52testboth("%#.*g", (110, -1.e+100/3.)) 53 54# test some ridiculously large precision, expect overflow 55testboth('%12.*f', (123456, 1.0)) 56 57# Formatting of long integers. Overflow is not ok 58overflowok = 0 59testboth("%x", 10L, "a") 60testboth("%x", 100000000000L, "174876e800") 61testboth("%o", 10L, "12") 62testboth("%o", 100000000000L, "1351035564000") 63testboth("%d", 10L, "10") 64testboth("%d", 100000000000L, "100000000000") 65 66big = 123456789012345678901234567890L 67testboth("%d", big, "123456789012345678901234567890") 68testboth("%d", -big, "-123456789012345678901234567890") 69testboth("%5d", -big, "-123456789012345678901234567890") 70testboth("%31d", -big, "-123456789012345678901234567890") 71testboth("%32d", -big, " -123456789012345678901234567890") 72testboth("%-32d", -big, "-123456789012345678901234567890 ") 73testboth("%032d", -big, "-0123456789012345678901234567890") 74testboth("%-032d", -big, "-123456789012345678901234567890 ") 75testboth("%034d", -big, "-000123456789012345678901234567890") 76testboth("%034d", big, "0000123456789012345678901234567890") 77testboth("%0+34d", big, "+000123456789012345678901234567890") 78testboth("%+34d", big, " +123456789012345678901234567890") 79testboth("%34d", big, " 123456789012345678901234567890") 80testboth("%.2d", big, "123456789012345678901234567890") 81testboth("%.30d", big, "123456789012345678901234567890") 82testboth("%.31d", big, "0123456789012345678901234567890") 83testboth("%32.31d", big, " 0123456789012345678901234567890") 84 85big = 0x1234567890abcdef12345L # 21 hex digits 86testboth("%x", big, "1234567890abcdef12345") 87testboth("%x", -big, "-1234567890abcdef12345") 88testboth("%5x", -big, "-1234567890abcdef12345") 89testboth("%22x", -big, "-1234567890abcdef12345") 90testboth("%23x", -big, " -1234567890abcdef12345") 91testboth("%-23x", -big, "-1234567890abcdef12345 ") 92testboth("%023x", -big, "-01234567890abcdef12345") 93testboth("%-023x", -big, "-1234567890abcdef12345 ") 94testboth("%025x", -big, "-0001234567890abcdef12345") 95testboth("%025x", big, "00001234567890abcdef12345") 96testboth("%0+25x", big, "+0001234567890abcdef12345") 97testboth("%+25x", big, " +1234567890abcdef12345") 98testboth("%25x", big, " 1234567890abcdef12345") 99testboth("%.2x", big, "1234567890abcdef12345") 100testboth("%.21x", big, "1234567890abcdef12345") 101testboth("%.22x", big, "01234567890abcdef12345") 102testboth("%23.22x", big, " 01234567890abcdef12345") 103testboth("%-23.22x", big, "01234567890abcdef12345 ") 104testboth("%X", big, "1234567890ABCDEF12345") 105testboth("%#X", big, "0X1234567890ABCDEF12345") 106testboth("%#x", big, "0x1234567890abcdef12345") 107testboth("%#x", -big, "-0x1234567890abcdef12345") 108testboth("%#.23x", -big, "-0x001234567890abcdef12345") 109testboth("%#+.23x", big, "+0x001234567890abcdef12345") 110testboth("%# .23x", big, " 0x001234567890abcdef12345") 111testboth("%#+.23X", big, "+0X001234567890ABCDEF12345") 112testboth("%#-+.23X", big, "+0X001234567890ABCDEF12345") 113testboth("%#-+26.23X", big, "+0X001234567890ABCDEF12345") 114testboth("%#-+27.23X", big, "+0X001234567890ABCDEF12345 ") 115testboth("%#+27.23X", big, " +0X001234567890ABCDEF12345") 116# next one gets two leading zeroes from precision, and another from the 117# 0 flag and the width 118testboth("%#+027.23X", big, "+0X0001234567890ABCDEF12345") 119# same, except no 0 flag 120testboth("%#+27.23X", big, " +0X001234567890ABCDEF12345") 121 122big = 012345670123456701234567012345670L # 32 octal digits 123testboth("%o", big, "12345670123456701234567012345670") 124testboth("%o", -big, "-12345670123456701234567012345670") 125testboth("%5o", -big, "-12345670123456701234567012345670") 126testboth("%33o", -big, "-12345670123456701234567012345670") 127testboth("%34o", -big, " -12345670123456701234567012345670") 128testboth("%-34o", -big, "-12345670123456701234567012345670 ") 129testboth("%034o", -big, "-012345670123456701234567012345670") 130testboth("%-034o", -big, "-12345670123456701234567012345670 ") 131testboth("%036o", -big, "-00012345670123456701234567012345670") 132testboth("%036o", big, "000012345670123456701234567012345670") 133testboth("%0+36o", big, "+00012345670123456701234567012345670") 134testboth("%+36o", big, " +12345670123456701234567012345670") 135testboth("%36o", big, " 12345670123456701234567012345670") 136testboth("%.2o", big, "12345670123456701234567012345670") 137testboth("%.32o", big, "12345670123456701234567012345670") 138testboth("%.33o", big, "012345670123456701234567012345670") 139testboth("%34.33o", big, " 012345670123456701234567012345670") 140testboth("%-34.33o", big, "012345670123456701234567012345670 ") 141testboth("%o", big, "12345670123456701234567012345670") 142testboth("%#o", big, "012345670123456701234567012345670") 143testboth("%#o", -big, "-012345670123456701234567012345670") 144testboth("%#.34o", -big, "-0012345670123456701234567012345670") 145testboth("%#+.34o", big, "+0012345670123456701234567012345670") 146testboth("%# .34o", big, " 0012345670123456701234567012345670") 147testboth("%#+.34o", big, "+0012345670123456701234567012345670") 148testboth("%#-+.34o", big, "+0012345670123456701234567012345670") 149testboth("%#-+37.34o", big, "+0012345670123456701234567012345670 ") 150testboth("%#+37.34o", big, " +0012345670123456701234567012345670") 151# next one gets one leading zero from precision 152testboth("%.33o", big, "012345670123456701234567012345670") 153# base marker shouldn't change that, since "0" is redundant 154testboth("%#.33o", big, "012345670123456701234567012345670") 155# but reduce precision, and base marker should add a zero 156testboth("%#.32o", big, "012345670123456701234567012345670") 157# one leading zero from precision, and another from "0" flag & width 158testboth("%034.33o", big, "0012345670123456701234567012345670") 159# base marker shouldn't change that 160testboth("%0#34.33o", big, "0012345670123456701234567012345670") 161 162# Some small ints, in both Python int and long flavors). 163testboth("%d", 42, "42") 164testboth("%d", -42, "-42") 165testboth("%d", 42L, "42") 166testboth("%d", -42L, "-42") 167testboth("%#x", 1, "0x1") 168testboth("%#x", 1L, "0x1") 169testboth("%#X", 1, "0X1") 170testboth("%#X", 1L, "0X1") 171testboth("%#o", 1, "01") 172testboth("%#o", 1L, "01") 173testboth("%#o", 0, "0") 174testboth("%#o", 0L, "0") 175testboth("%o", 0, "0") 176testboth("%o", 0L, "0") 177testboth("%d", 0, "0") 178testboth("%d", 0L, "0") 179testboth("%#x", 0, "0x0") 180testboth("%#x", 0L, "0x0") 181testboth("%#X", 0, "0X0") 182testboth("%#X", 0L, "0X0") 183 184testboth("%x", 0x42, "42") 185# testboth("%x", -0x42, "ffffffbe") # Alas, that's specific to 32-bit machines 186testboth("%x", 0x42L, "42") 187testboth("%x", -0x42L, "-42") 188 189testboth("%o", 042, "42") 190# testboth("%o", -042, "37777777736") # Alas, that's specific to 32-bit machines 191testboth("%o", 042L, "42") 192testboth("%o", -042L, "-42") 193 194# Test exception for unknown format characters 195if verbose: 196 print 'Testing exceptions' 197 198def test_exc(formatstr, args, exception, excmsg): 199 try: 200 testformat(formatstr, args) 201 except exception, exc: 202 if str(exc) == excmsg: 203 if verbose: 204 print "yes" 205 else: 206 if verbose: print 'no' 207 print 'Unexpected ', exception, ':', repr(str(exc)) 208 except: 209 if verbose: print 'no' 210 print 'Unexpected exception' 211 raise 212 213test_exc('abc %a', 1, ValueError, 214 "unsupported format character 'a' (0x61) at index 5") 215test_exc(u'abc %\u3000', 1, ValueError, 216 "unsupported format character '?' (0x3000) at index 5") 217