diff options
Diffstat (limited to 'Lib/test/test_marshal.py')
-rw-r--r-- | Lib/test/test_marshal.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py new file mode 100644 index 0000000..38b3cd4 --- /dev/null +++ b/Lib/test/test_marshal.py @@ -0,0 +1,41 @@ +from test_support import TestFailed +import marshal +import sys + +# XXX Much more needed here. + +# Test the full range of Python ints. +n = sys.maxint +while n: + for expected in (-n, n): + s = marshal.dumps(expected) + got = marshal.loads(s) + if expected != got: + raise TestFailed("for int %d, marshal string is %r, loaded " + "back as %d" % (expected, s, got)) + n = n >> 1 + +# Simulate int marshaling on a 64-bit box. This is most interesting if +# we're running the test on a 32-bit box, of course. + +def to_little_endian_string(value, nbytes): + bytes = [] + for i in range(nbytes): + bytes.append(chr(value & 0xff)) + value >>= 8 + return ''.join(bytes) + +maxint64 = (1L << 63) - 1 +minint64 = -maxint64-1 + +for base in maxint64, minint64, -maxint64, -(minint64 >> 1): + while base: + s = 'I' + to_little_endian_string(base, 8) + got = marshal.loads(s) + if base != got: + raise TestFailed("for int %d, simulated marshal string is %r, " + "loaded back as %d" % (base, s, got)) + if base == -1: # a fixed-point for shifting right 1 + base = 0 + else: + base >>= 1 |