Skip to content

Commit d71f317

Browse files
Add more tests for preserving identity in marshal. (GH-13736)
1 parent b7daabd commit d71f317

File tree

1 file changed

+51
-18
lines changed

1 file changed

+51
-18
lines changed

Lib/test/test_marshal.py

Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -383,22 +383,20 @@ def CollectObjectIDs(ids, obj):
383383
return len(ids)
384384

385385
class InstancingTestCase(unittest.TestCase, HelperMixin):
386-
intobj = 123321
387-
floatobj = 1.2345
388-
strobj = "abcde"*3
389-
dictobj = {"hello":floatobj, "goodbye":floatobj, floatobj:"hello"}
386+
keys = (123, 1.2345, 'abc', (123, 'abc'), frozenset({123, 'abc'}))
390387

391388
def helper3(self, rsample, recursive=False, simple=False):
392389
#we have two instances
393390
sample = (rsample, rsample)
394391

395392
n0 = CollectObjectIDs(set(), sample)
396393

397-
s3 = marshal.dumps(sample, 3)
398-
n3 = CollectObjectIDs(set(), marshal.loads(s3))
394+
for v in range(3, marshal.version + 1):
395+
s3 = marshal.dumps(sample, v)
396+
n3 = CollectObjectIDs(set(), marshal.loads(s3))
399397

400-
#same number of instances generated
401-
self.assertEqual(n3, n0)
398+
#same number of instances generated
399+
self.assertEqual(n3, n0)
402400

403401
if not recursive:
404402
#can compare with version 2
@@ -414,20 +412,54 @@ def helper3(self, rsample, recursive=False, simple=False):
414412
self.assertGreaterEqual(len(s2), len(s3))
415413

416414
def testInt(self):
417-
self.helper(self.intobj)
418-
self.helper3(self.intobj, simple=True)
415+
intobj = 123321
416+
self.helper(intobj)
417+
self.helper3(intobj, simple=True)
419418

420419
def testFloat(self):
421-
self.helper(self.floatobj)
422-
self.helper3(self.floatobj)
420+
floatobj = 1.2345
421+
self.helper(floatobj)
422+
self.helper3(floatobj)
423423

424424
def testStr(self):
425-
self.helper(self.strobj)
426-
self.helper3(self.strobj)
425+
strobj = "abcde"*3
426+
self.helper(strobj)
427+
self.helper3(strobj)
428+
429+
def testBytes(self):
430+
bytesobj = b"abcde"*3
431+
self.helper(bytesobj)
432+
self.helper3(bytesobj)
433+
434+
def testList(self):
435+
for obj in self.keys:
436+
listobj = [obj, obj]
437+
self.helper(listobj)
438+
self.helper3(listobj)
439+
440+
def testTuple(self):
441+
for obj in self.keys:
442+
tupleobj = (obj, obj)
443+
self.helper(tupleobj)
444+
self.helper3(tupleobj)
445+
446+
def testSet(self):
447+
for obj in self.keys:
448+
setobj = {(obj, 1), (obj, 2)}
449+
self.helper(setobj)
450+
self.helper3(setobj)
451+
452+
def testFrozenSet(self):
453+
for obj in self.keys:
454+
frozensetobj = frozenset({(obj, 1), (obj, 2)})
455+
self.helper(frozensetobj)
456+
self.helper3(frozensetobj)
427457

428458
def testDict(self):
429-
self.helper(self.dictobj)
430-
self.helper3(self.dictobj)
459+
for obj in self.keys:
460+
dictobj = {"hello": obj, "goodbye": obj, obj: "hello"}
461+
self.helper(dictobj)
462+
self.helper3(dictobj)
431463

432464
def testModule(self):
433465
with open(__file__, "rb") as f:
@@ -438,10 +470,11 @@ def testModule(self):
438470
self.helper3(code)
439471

440472
def testRecursion(self):
441-
d = dict(self.dictobj)
473+
obj = 1.2345
474+
d = {"hello": obj, "goodbye": obj, obj: "hello"}
442475
d["self"] = d
443476
self.helper3(d, recursive=True)
444-
l = [self.dictobj]
477+
l = [obj, obj]
445478
l.append(l)
446479
self.helper3(l, recursive=True)
447480

0 commit comments

Comments
 (0)