Kaydet (Commit) e089c688 authored tarafından Tim Peters's avatar Tim Peters

Test full range of native ints. This exposes two more binary pickle

bugs on sizeof(long)==8 machines.  pickle.py has no idea what it's
doing with very large ints, and variously gets things right by accident,
computes nonsense, or generates corrupt pickles.  cPickle fails on
cases 2**31 <= i < 2**32:  since it *thinks* those are 4-byte ints
(the "high 4 bytes" are all zeroes), it stores them in the (signed!) BININT
format, so they get unpickled as negative values.
üst aa815df1
# test_pickle and test_cpickle both use this.
from test_support import TestFailed
import sys
# break into multiple strings to please font-lock-mode
DATA = """(lp1
I0
......@@ -197,3 +200,19 @@ def dotest(pickle):
else:
if u2 != u:
print "Endcase failure: %s => %s" % (`u`, `u2`)
# Test the full range of Python ints.
n = sys.maxint
while n:
for expected in (-n, n):
for binary_mode in (0, 1):
s = pickle.dumps(expected, binary_mode)
got = pickle.loads(s)
if expected != got:
raise TestFailed("for %s-mode pickle of %d, pickle "
"string is %s, loaded back as %s" % (
binary_mode and "binary" or "text",
expected,
repr(s),
got))
n = n >> 1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment