test_format.py revision 4d192b37ecaee5948d92eee0519de391c0b7b446
1from test_support import verbose 2import string, 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") 167 168testboth("%x", 0x42, "42") 169# testboth("%x", -0x42, "ffffffbe") # Alas, that's specific to 32-bit machines 170testboth("%x", 0x42L, "42") 171testboth("%x", -0x42L, "-42") 172 173testboth("%o", 042, "42") 174# testboth("%o", -042, "37777777736") # Alas, that's specific to 32-bit machines 175testboth("%o", 042L, "42") 176testboth("%o", -042L, "-42") 177 178# Test exception for unknown format characters 179if verbose: 180 print 'Testing exceptions' 181 182def test_exc(formatstr, args, exception, excmsg): 183 try: 184 testformat(formatstr, args) 185 except exception, exc: 186 if str(exc) == excmsg: 187 if verbose: 188 print "yes" 189 else: 190 if verbose: print 'no' 191 print 'Unexpected ', exception, ':', repr(str(exc)) 192 except: 193 if verbose: print 'no' 194 print 'Unexpected exception' 195 raise 196 197test_exc('abc %a', 1, ValueError, 198 "unsupported format character 'a' (0x61) at index 5") 199test_exc(u'abc %\u3000', 1, ValueError, 200 "unsupported format character '\000' (0x3000) at index 5") 201 202