1ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport cPickle
2ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport cStringIO
3ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport io
4ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport unittest
5ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom test.pickletester import (AbstractPickleTests,
6ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                               AbstractPickleModuleTests,
7ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                               AbstractPicklerUnpicklerObjectTests,
8ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                               BigmemPickleTests)
9ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom test import test_support
10ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
11ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cStringIOMixin:
12ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    output = input = cStringIO.StringIO
13ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
14ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def close(self, f):
15ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        pass
16ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
17ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass BytesIOMixin:
18ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    output = input = io.BytesIO
19ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
20ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def close(self, f):
21ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        pass
22ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
23ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass FileIOMixin:
24ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
25ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def output(self):
26ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        return open(test_support.TESTFN, 'wb+')
27ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
28ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def input(self, data):
29ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = open(test_support.TESTFN, 'wb+')
30ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
31ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            f.write(data)
32ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            f.seek(0)
33ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return f
34ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        except:
35ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            f.close()
36ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            raise
37ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
38ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def close(self, f):
39ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f.close()
40ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        test_support.unlink(test_support.TESTFN)
41ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
42ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
43ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
44ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
45ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def setUp(self):
46ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.dumps = cPickle.dumps
47ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.loads = cPickle.loads
48ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
49ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    error = cPickle.BadPickleGet
50ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    module = cPickle
51ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
52ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPicklePicklerTests(AbstractPickleTests):
53ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
54ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def dumps(self, arg, proto=0):
55ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = self.output()
56ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
57ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p = cPickle.Pickler(f, proto)
58ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p.dump(arg)
59ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            f.seek(0)
60ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return f.read()
61ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        finally:
62ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            self.close(f)
63ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
64ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def loads(self, buf):
65ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = self.input(buf)
66ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
67ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p = cPickle.Unpickler(f)
68ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return p.load()
69ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        finally:
70ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            self.close(f)
71ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
72ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    error = cPickle.BadPickleGet
73ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
74ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cStringIOCPicklerTests(cStringIOMixin, cPicklePicklerTests):
75ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
76ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
77ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass BytesIOCPicklerTests(BytesIOMixin, cPicklePicklerTests):
78ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
79ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
80ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass FileIOCPicklerTests(FileIOMixin, cPicklePicklerTests):
81ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
82ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
83ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
84ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPickleListPicklerTests(AbstractPickleTests):
85ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
86ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def dumps(self, arg, proto=0):
87ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        p = cPickle.Pickler(proto)
88ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        p.dump(arg)
89ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        return p.getvalue()
90ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
91ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def loads(self, *args):
92ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = self.input(args[0])
93ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
94ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p = cPickle.Unpickler(f)
95ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return p.load()
96ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        finally:
97ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            self.close(f)
98ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
99ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    error = cPickle.BadPickleGet
100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cStringIOCPicklerListTests(cStringIOMixin, cPickleListPicklerTests):
102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass BytesIOCPicklerListTests(BytesIOMixin, cPickleListPicklerTests):
105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass FileIOCPicklerListTests(FileIOMixin, cPickleListPicklerTests):
108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPickleFastPicklerTests(AbstractPickleTests):
112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def dumps(self, arg, proto=0):
114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = self.output()
115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p = cPickle.Pickler(f, proto)
117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p.fast = 1
118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p.dump(arg)
119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            f.seek(0)
120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return f.read()
121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        finally:
122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            self.close(f)
123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def loads(self, *args):
125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        f = self.input(args[0])
126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        try:
127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            p = cPickle.Unpickler(f)
128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            return p.load()
129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        finally:
130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            self.close(f)
131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    error = cPickle.BadPickleGet
133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_recursive_list(self):
135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises(ValueError,
136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          AbstractPickleTests.test_recursive_list,
137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          self)
138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_recursive_tuple(self):
140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises(ValueError,
141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          AbstractPickleTests.test_recursive_tuple,
142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          self)
143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_recursive_inst(self):
145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises(ValueError,
146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          AbstractPickleTests.test_recursive_inst,
147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          self)
148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_recursive_dict(self):
150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises(ValueError,
151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          AbstractPickleTests.test_recursive_dict,
152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          self)
153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_recursive_multi(self):
155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises(ValueError,
156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          AbstractPickleTests.test_recursive_multi,
157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh                          self)
158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_nonrecursive_deep(self):
160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # If it's not cyclic, it should pickle OK even if the nesting
161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # depth exceeds PY_CPICKLE_FAST_LIMIT.  That happens to be
162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # 50 today.  Jack Jansen reported stack overflow on Mac OS 9
163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # at 64.
164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        a = []
165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        for i in range(60):
166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            a = [a]
167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        b = self.loads(self.dumps(a))
168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertEqual(a, b)
169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cStringIOCPicklerFastTests(cStringIOMixin, cPickleFastPicklerTests):
171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass BytesIOCPicklerFastTests(BytesIOMixin, cPickleFastPicklerTests):
174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass FileIOCPicklerFastTests(FileIOMixin, cPickleFastPicklerTests):
177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPicklePicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests):
181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pickler_class = cPickle.Pickler
183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    unpickler_class = cPickle.Unpickler
184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPickleBigmemPickleTests(BigmemPickleTests):
186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def dumps(self, arg, proto=0, fast=0):
188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # Ignore fast
189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        return cPickle.dumps(arg, proto)
190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def loads(self, buf):
192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # Ignore fast
193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        return cPickle.loads(buf)
194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass Node(object):
197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    pass
198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass cPickleDeepRecursive(unittest.TestCase):
200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_issue2702(self):
201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # This should raise a RecursionLimit but in some
202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # platforms (FreeBSD, win32) sometimes raises KeyError instead,
203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # or just silently terminates the interpreter (=crashes).
204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        nodes = [Node() for i in range(500)]
205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        for n in nodes:
206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            n.connections = list(nodes)
207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            n.connections.remove(n)
208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        self.assertRaises((AttributeError, RuntimeError), cPickle.dumps, n)
209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    def test_issue3179(self):
211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # Safe test, because I broke this case when fixing the
212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        # behaviour for the previous test.
213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        res=[]
214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        for x in range(1,2000):
215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh            res.append(dict(doc=x, similar=[]))
216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cPickle.dumps(res)
217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef test_main():
220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    test_support.run_unittest(
221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cPickleTests,
222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cStringIOCPicklerTests,
223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        BytesIOCPicklerTests,
224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        FileIOCPicklerTests,
225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cStringIOCPicklerListTests,
226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        BytesIOCPicklerListTests,
227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        FileIOCPicklerListTests,
228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cStringIOCPicklerFastTests,
229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        BytesIOCPicklerFastTests,
230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        FileIOCPicklerFastTests,
231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cPickleDeepRecursive,
232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cPicklePicklerUnpicklerObjectTests,
233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh        cPickleBigmemPickleTests,
234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    )
235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh
236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehif __name__ == "__main__":
237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh    test_main()
238