Patch for bug #659709: bogus computation of float length

Python 2.2.x backport candidate. (This bug has been around since
Python 1.6.)
This commit is contained in:
Marc-André Lemburg 2002-12-29 19:44:06 +00:00
parent bbfb910416
commit 79f57833f3
4 changed files with 88 additions and 16 deletions

View file

@ -57,3 +57,29 @@ string_tests.run_inplace_tests(str)
string.whitespace
string.lowercase
string.uppercase
# Float formatting
for prec in range(100):
formatstring = u'%%.%if' % prec
value = 0.01
for x in range(60):
value = value * 3.141592655 / 3.0 * 10.0
#print 'Overflow check for x=%i and prec=%i:' % \
# (x, prec),
try:
result = formatstring % value
except OverflowError:
# The formatfloat() code in stringobject.c and
# unicodeobject.c uses a 120 byte buffer and switches from
# 'f' formatting to 'g' at precision 50, so we expect
# OverflowErrors for the ranges x < 50 and prec >= 67.
if x >= 50 or \
prec < 67:
print '*** unexpected OverflowError for x=%i and prec=%i' % (x, prec)
else:
#print 'OverflowError'
pass
else:
#print result
pass

View file

@ -476,6 +476,31 @@ for ordinal in (-100, 0x200000):
else:
print '*** formatting u"%%c" %% %i should give a ValueError' % ordinal
# float formatting
for prec in range(100):
formatstring = u'%%.%if' % prec
value = 0.01
for x in range(60):
value = value * 3.141592655 / 3.0 * 10.0
#print 'Overflow check for x=%i and prec=%i:' % \
# (x, prec),
try:
result = formatstring % value
except OverflowError:
# The formatfloat() code in stringobject.c and
# unicodeobject.c uses a 120 byte buffer and switches from
# 'f' formatting to 'g' at precision 50, so we expect
# OverflowErrors for the ranges x < 50 and prec >= 67.
if x >= 50 or \
prec < 67:
print '*** unexpected OverflowError for x=%i and prec=%i' % (x, prec)
else:
#print 'OverflowError'
pass
else:
#print result
pass
# formatting jobs delegated from the string implementation:
verify('...%(foo)s...' % {'foo':u"abc"} == u'...abc...')
verify('...%(foo)s...' % {'foo':"abc"} == '...abc...')