[Python-Dev] Possible bugs in test_struct

Collin Winter collinw at gmail.com
Thu Mar 29 21:50:14 CEST 2007


While converting test_struct to use unittest, I came across these two issues:

1) r51119 by Bob Ippolito added a test case for "SF bug 1530559:
struct.pack raises TypeError where it used to convert." (Handy diff at
http://svn.python.org/view/python/trunk/Lib/test/test_struct.py?rev=51119&r1=46679&r2=51119).
 As far as I can tell, this test doesn't work, thanks to the lines

check_float_coerce = with_warning_restore(deprecated_err)
  	
def test_1530559():
    for endian in ('', '>', '<'):
        for fmt in ('B', 'H', 'I', 'L', 'b', 'h', 'i', 'l'):
            check_float_coerce(endian + fmt, 1.0)
            check_float_coerce(endian + fmt, 1.5)

The problem is that the calls to check_float_coerce() attempt to call
the string produced by "endian + fmt", so a TypeError will always be
raised.

Fixing the test to do what was actually intended causes a TestFailed
error to be raised with the message "did not raise error for float
coerce". I'm confused as to why this is a test failure, when it seems
like "rais[ing an] error for float coerce" is exactly what we're
trying to avoid. Anyone know what's going on here?

2) test_705836() features the code

    big = (1 << 25) - 1
    big = math.ldexp(big, 127 - 24)
    try:
        packed = struct.pack(">f", big)
    except OverflowError:
        pass
    else:
        TestFailed("expected OverflowError")

Actually raising the TestFailed exception (as opposed to just
instantiating it) causes a test failure. Is this a bug in struct or a
bad test?

Thanks,
Collin Winter


More information about the Python-Dev mailing list