[Python-checkins] python/dist/src/Lib/test pickletester.py,1.34,1.35
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Sun, 02 Feb 2003 09:26:42 -0800
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv22945/Lib/test
Modified Files:
pickletester.py
Log Message:
Beefed up the tests by putting in more "for proto in protocols:" outer
loops. Renamed DATA and BINDATA to DATA0 and DATA1. Included
disassemblies, but noted why we can't test them. Added XXX comment to
cPickle about a mysterious comment, where pickle and cPickle diverge
in how they number PUT indices.
Index: pickletester.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/pickletester.py,v
retrieving revision 1.34
retrieving revision 1.35
diff -C2 -d -r1.34 -r1.35
*** pickletester.py 2 Feb 2003 16:09:05 -0000 1.34
--- pickletester.py 2 Feb 2003 17:26:39 -0000 1.35
***************
*** 36,44 ****
__metaclass__ = metaclass
! # DATA and BINDATA are the protocol 0 and protocol 1 pickles of the object
! # returned by create_data().
# break into multiple strings to avoid confusing font-lock-mode
! DATA = """(lp1
I0
aL1L
--- 36,45 ----
__metaclass__ = metaclass
! # DATA0 .. DATA2 are the pickles we expect under the various protocols, for
! # the object returned by create_data().
! # XXX DATA2 doesn't exist yet, as it's not fully implemented in cPickle.
# break into multiple strings to avoid confusing font-lock-mode
! DATA0 = """(lp1
I0
aL1L
***************
*** 85,96 ****
"""
! BINDATA = ']q\x01(K\x00L1L\nG@\x00\x00\x00\x00\x00\x00\x00' + \
! 'c__builtin__\ncomplex\nq\x02(G@\x08\x00\x00\x00\x00\x00' + \
! '\x00G\x00\x00\x00\x00\x00\x00\x00\x00tRq\x03K\x01J\xff\xff' + \
! '\xff\xffK\xffJ\x01\xff\xff\xffJ\x00\xff\xff\xffM\xff\xff' + \
! 'J\x01\x00\xff\xffJ\x00\x00\xff\xffJ\xff\xff\xff\x7fJ\x01\x00' + \
! '\x00\x80J\x00\x00\x00\x80(U\x03abcq\x04h\x04(c__main__\n' + \
! 'C\nq\x05oq\x06}q\x07(U\x03fooq\x08K\x01U\x03barq\tK\x02ubh' + \
! '\x06tq\nh\nK\x05e.'
def create_data():
--- 86,228 ----
"""
! # Disassembly of DATA0.
! DATA0_DIS = """\
! 0: ( MARK
! 1: l LIST (MARK at 0)
! 2: p PUT 1
! 5: I INT 0
! 8: a APPEND
! 9: L LONG 1L
! 13: a APPEND
! 14: F FLOAT 2.0
! 17: a APPEND
! 18: c GLOBAL '__builtin__ complex'
! 39: p PUT 2
! 42: ( MARK
! 43: F FLOAT 3.0
! 46: F FLOAT 0.0
! 49: t TUPLE (MARK at 42)
! 50: R REDUCE
! 51: p PUT 3
! 54: a APPEND
! 55: I INT 1
! 58: a APPEND
! 59: I INT -1
! 63: a APPEND
! 64: I INT 255
! 69: a APPEND
! 70: I INT -255
! 76: a APPEND
! 77: I INT -256
! 83: a APPEND
! 84: I INT 65535
! 91: a APPEND
! 92: I INT -65535
! 100: a APPEND
! 101: I INT -65536
! 109: a APPEND
! 110: I INT 2147483647
! 122: a APPEND
! 123: I INT -2147483647
! 136: a APPEND
! 137: I INT -2147483648
! 150: a APPEND
! 151: ( MARK
! 152: S STRING 'abc'
! 159: p PUT 4
! 162: g GET 4
! 165: ( MARK
! 166: i INST '__main__ C' (MARK at 165)
! 178: p PUT 5
! 181: ( MARK
! 182: d DICT (MARK at 181)
! 183: p PUT 6
! 186: S STRING 'foo'
! 193: p PUT 7
! 196: I INT 1
! 199: s SETITEM
! 200: S STRING 'bar'
! 207: p PUT 8
! 210: I INT 2
! 213: s SETITEM
! 214: b BUILD
! 215: g GET 5
! 218: t TUPLE (MARK at 151)
! 219: p PUT 9
! 222: a APPEND
! 223: g GET 9
! 226: a APPEND
! 227: I INT 5
! 230: a APPEND
! 231: . STOP
! highest protocol among opcodes = 0
! """
!
! DATA1 = (']q\x01(K\x00L1L\nG@\x00\x00\x00\x00\x00\x00\x00'
! 'c__builtin__\ncomplex\nq\x02(G@\x08\x00\x00\x00\x00\x00'
! '\x00G\x00\x00\x00\x00\x00\x00\x00\x00tRq\x03K\x01J\xff\xff'
! '\xff\xffK\xffJ\x01\xff\xff\xffJ\x00\xff\xff\xffM\xff\xff'
! 'J\x01\x00\xff\xffJ\x00\x00\xff\xffJ\xff\xff\xff\x7fJ\x01\x00'
! '\x00\x80J\x00\x00\x00\x80(U\x03abcq\x04h\x04(c__main__\n'
! 'C\nq\x05oq\x06}q\x07(U\x03fooq\x08K\x01U\x03barq\tK\x02ubh'
! '\x06tq\nh\nK\x05e.'
! )
!
! # Disassembly of DATA1.
! DATA1_DIS = """\
! 0: ] EMPTY_LIST
! 1: q BINPUT 1
! 3: ( MARK
! 4: K BININT1 0
! 6: L LONG 1L
! 10: G BINFLOAT 2.0
! 19: c GLOBAL '__builtin__ complex'
! 40: q BINPUT 2
! 42: ( MARK
! 43: G BINFLOAT 3.0
! 52: G BINFLOAT 0.0
! 61: t TUPLE (MARK at 42)
! 62: R REDUCE
! 63: q BINPUT 3
! 65: K BININT1 1
! 67: J BININT -1
! 72: K BININT1 255
! 74: J BININT -255
! 79: J BININT -256
! 84: M BININT2 65535
! 87: J BININT -65535
! 92: J BININT -65536
! 97: J BININT 2147483647
! 102: J BININT -2147483647
! 107: J BININT -2147483648
! 112: ( MARK
! 113: U SHORT_BINSTRING 'abc'
! 118: q BINPUT 4
! 120: h BINGET 4
! 122: ( MARK
! 123: c GLOBAL '__main__ C'
! 135: q BINPUT 5
! 137: o OBJ (MARK at 122)
! 138: q BINPUT 6
! 140: } EMPTY_DICT
! 141: q BINPUT 7
! 143: ( MARK
! 144: U SHORT_BINSTRING 'foo'
! 149: q BINPUT 8
! 151: K BININT1 1
! 153: U SHORT_BINSTRING 'bar'
! 158: q BINPUT 9
! 160: K BININT1 2
! 162: u SETITEMS (MARK at 143)
! 163: b BUILD
! 164: h BINGET 6
! 166: t TUPLE (MARK at 112)
! 167: q BINPUT 10
! 169: h BINGET 10
! 171: K BININT1 5
! 173: e APPENDS (MARK at 3)
! 174: . STOP
! highest protocol among opcodes = 1
! """
def create_data():
***************
*** 115,186 ****
class AbstractPickleTests(unittest.TestCase):
_testdata = create_data()
def setUp(self):
- # subclass must define self.dumps, self.loads, self.error
pass
def test_misc(self):
# test various datatypes not tested by testdata
! x = myint(4)
! s = self.dumps(x)
! y = self.loads(s)
! self.assertEqual(x, y)
! x = (1, ())
! s = self.dumps(x)
! y = self.loads(s)
! self.assertEqual(x, y)
! x = initarg(1, x)
! s = self.dumps(x)
! y = self.loads(s)
! self.assertEqual(x, y)
# XXX test __reduce__ protocol?
! def test_identity(self):
! s = self.dumps(self._testdata)
! x = self.loads(s)
! self.assertEqual(x, self._testdata)
! def test_constant(self):
! x = self.loads(DATA)
! self.assertEqual(x, self._testdata)
! x = self.loads(BINDATA)
! self.assertEqual(x, self._testdata)
! def test_binary(self):
! s = self.dumps(self._testdata, 1)
! x = self.loads(s)
! self.assertEqual(x, self._testdata)
def test_recursive_list(self):
l = []
l.append(l)
! s = self.dumps(l)
! x = self.loads(s)
! self.assertEqual(x, l)
! self.assertEqual(x, x[0])
! self.assertEqual(id(x), id(x[0]))
def test_recursive_dict(self):
d = {}
d[1] = d
! s = self.dumps(d)
! x = self.loads(s)
! self.assertEqual(x, d)
! self.assertEqual(x[1], x)
! self.assertEqual(id(x[1]), id(x))
def test_recursive_inst(self):
i = C()
i.attr = i
! s = self.dumps(i)
! x = self.loads(s)
! self.assertEqual(x, i)
! self.assertEqual(x.attr, x)
! self.assertEqual(id(x.attr), id(x))
def test_recursive_multi(self):
--- 247,336 ----
class AbstractPickleTests(unittest.TestCase):
+ # Subclass must define self.dumps, self.loads, self.error.
_testdata = create_data()
def setUp(self):
pass
def test_misc(self):
# test various datatypes not tested by testdata
! for proto in protocols:
! x = myint(4)
! s = self.dumps(x, proto)
! y = self.loads(s)
! self.assertEqual(x, y)
! x = (1, ())
! s = self.dumps(x, proto)
! y = self.loads(s)
! self.assertEqual(x, y)
! x = initarg(1, x)
! s = self.dumps(x, proto)
! y = self.loads(s)
! self.assertEqual(x, y)
# XXX test __reduce__ protocol?
! def test_roundtrip_equality(self):
! expected = self._testdata
! for proto in protocols:
! s = self.dumps(expected, proto)
! got = self.loads(s)
! self.assertEqual(expected, got)
! def test_load_from_canned_string(self):
! expected = self._testdata
! for canned in DATA0, DATA1:
! got = self.loads(canned)
! self.assertEqual(expected, got)
! # There are gratuitous differences between pickles produced by
! # pickle and cPickle, largely because cPickle starts PUT indices at
! # 1 and pickle starts them at 0. See XXX comment in cPickle's put2() --
! # there's a comment with an exclamation point there whose meaning
! # is a mystery. cPickle also suppresses PUT for objects with a refcount
! # of 1.
! def dont_test_disassembly(self):
! from cStringIO import StringIO
! from pickletools import dis
!
! for proto, expected in (0, DATA0_DIS), (1, DATA1_DIS):
! s = self.dumps(self._testdata, proto)
! filelike = StringIO()
! dis(s, out=filelike)
! got = filelike.getvalue()
! self.assertEqual(expected, got)
def test_recursive_list(self):
l = []
l.append(l)
! for proto in protocols:
! s = self.dumps(l, proto)
! x = self.loads(s)
! self.assertEqual(x, l)
! self.assertEqual(x, x[0])
! self.assertEqual(id(x), id(x[0]))
def test_recursive_dict(self):
d = {}
d[1] = d
! for proto in protocols:
! s = self.dumps(d, proto)
! x = self.loads(s)
! self.assertEqual(x, d)
! self.assertEqual(x[1], x)
! self.assertEqual(id(x[1]), id(x))
def test_recursive_inst(self):
i = C()
i.attr = i
! for proto in protocols:
! s = self.dumps(i, 2)
! x = self.loads(s)
! self.assertEqual(x, i)
! self.assertEqual(x.attr, x)
! self.assertEqual(id(x.attr), id(x))
def test_recursive_multi(self):
***************
*** 190,201 ****
i.attr = d
l.append(i)
! s = self.dumps(l)
! x = self.loads(s)
! self.assertEqual(x, l)
! self.assertEqual(x[0], i)
! self.assertEqual(x[0].attr, d)
! self.assertEqual(x[0].attr[1], x)
! self.assertEqual(x[0].attr[1][0], i)
! self.assertEqual(x[0].attr[1][0].attr, d)
def test_garyp(self):
--- 340,352 ----
i.attr = d
l.append(i)
! for proto in protocols:
! s = self.dumps(l, proto)
! x = self.loads(s)
! self.assertEqual(x, l)
! self.assertEqual(x[0], i)
! self.assertEqual(x[0].attr, d)
! self.assertEqual(x[0].attr[1], x)
! self.assertEqual(x[0].attr[1][0], i)
! self.assertEqual(x[0].attr[1][0].attr, d)
def test_garyp(self):
***************
*** 275,299 ****
def test_metaclass(self):
a = use_metaclass()
! s = self.dumps(a)
! b = self.loads(s)
! self.assertEqual(a.__class__, b.__class__)
def test_structseq(self):
import time
- t = time.localtime()
- s = self.dumps(t)
- u = self.loads(s)
- self.assertEqual(t, u)
import os
! if hasattr(os, "stat"):
! t = os.stat(os.curdir)
! s = self.dumps(t)
! u = self.loads(s)
! self.assertEqual(t, u)
! if hasattr(os, "statvfs"):
! t = os.statvfs(os.curdir)
! s = self.dumps(t)
u = self.loads(s)
self.assertEqual(t, u)
# Tests for protocol 2
--- 426,453 ----
def test_metaclass(self):
a = use_metaclass()
! for proto in protocols:
! s = self.dumps(a, proto)
! b = self.loads(s)
! self.assertEqual(a.__class__, b.__class__)
def test_structseq(self):
import time
import os
!
! t = time.localtime()
! for proto in protocols:
! s = self.dumps(t, proto)
u = self.loads(s)
self.assertEqual(t, u)
+ if hasattr(os, "stat"):
+ t = os.stat(os.curdir)
+ s = self.dumps(t, proto)
+ u = self.loads(s)
+ self.assertEqual(t, u)
+ if hasattr(os, "statvfs"):
+ t = os.statvfs(os.curdir)
+ s = self.dumps(t, proto)
+ u = self.loads(s)
+ self.assertEqual(t, u)
# Tests for protocol 2
***************
*** 357,363 ****
self.assertEqual(tuple(x), tuple(y))
self.assertEqual(x.__dict__, y.__dict__)
- ## import pickletools
- ## print
- ## pickletools.dis(s)
def test_newobj_list(self):
--- 511,514 ----
***************
*** 369,375 ****
self.assertEqual(list(x), list(y))
self.assertEqual(x.__dict__, y.__dict__)
- ## import pickletools
- ## print
- ## pickletools.dis(s)
def test_newobj_generic(self):
--- 520,523 ----
***************
*** 380,386 ****
x.foo = 42
s = self.dumps(x, proto)
- ## import pickletools
- ## print
- ## pickletools.dis(s)
y = self.loads(s)
detail = (proto, C, B, x, y, type(y))
--- 528,531 ----