Skip to content

updated test_deque.py from CPython v3.11.2 #4761

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 25, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 34 additions & 60 deletions Lib/test/test_deque.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from collections import deque
import doctest
import unittest
from test import support, seq_tests
import gc
Expand Down Expand Up @@ -743,8 +744,9 @@ class C(object):

@support.cpython_only
def test_sizeof(self):
MAXFREEBLOCKS = 16
BLOCKLEN = 64
basesize = support.calcvobjsize('2P4nP')
basesize = support.calcvobjsize('2P5n%dPP' % MAXFREEBLOCKS)
blocksize = struct.calcsize('P%dPP' % BLOCKLEN)
self.assertEqual(object.__sizeof__(deque()), basesize)
check = self.check_sizeof
Expand Down Expand Up @@ -781,6 +783,9 @@ def test_runtime_error_on_empty_deque(self):
class Deque(deque):
pass

class DequeWithSlots(deque):
__slots__ = ('x', 'y', '__dict__')

class DequeWithBadIter(deque):
def __iter__(self):
raise TypeError
Expand Down Expand Up @@ -809,41 +814,31 @@ def test_basics(self):
d.clear()
self.assertEqual(len(d), 0)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_copy_pickle(self):

d = Deque('abc')

e = d.__copy__()
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

e = Deque(d)
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

for proto in range(pickle.HIGHEST_PROTOCOL + 1):
s = pickle.dumps(d, proto)
e = pickle.loads(s)
self.assertNotEqual(id(d), id(e))
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

d = Deque('abcde', maxlen=4)

e = d.__copy__()
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

e = Deque(d)
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

for proto in range(pickle.HIGHEST_PROTOCOL + 1):
s = pickle.dumps(d, proto)
e = pickle.loads(s)
self.assertNotEqual(id(d), id(e))
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))
for cls in Deque, DequeWithSlots:
for d in cls('abc'), cls('abcde', maxlen=4):
d.x = ['x']
d.z = ['z']

e = d.__copy__()
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

e = cls(d)
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))

for proto in range(pickle.HIGHEST_PROTOCOL + 1):
s = pickle.dumps(d, proto)
e = pickle.loads(s)
self.assertNotEqual(id(d), id(e))
self.assertEqual(type(d), type(e))
self.assertEqual(list(d), list(e))
self.assertEqual(e.x, d.x)
self.assertEqual(e.z, d.z)
self.assertFalse(hasattr(e, 'y'))

# TODO: RUSTPYTHON
@unittest.expectedFailure
Expand Down Expand Up @@ -1036,31 +1031,10 @@ def test_free_after_iterating(self):

__test__ = {'libreftest' : libreftest}

def test_main(verbose=None):
import sys
test_classes = (
TestBasic,
TestVariousIteratorArgs,
TestSubclass,
TestSubclassWithKwargs,
TestSequence,
)

support.run_unittest(*test_classes)

# verify reference counting
if verbose and hasattr(sys, "gettotalrefcount"):
import gc
counts = [None] * 5
for i in range(len(counts)):
support.run_unittest(*test_classes)
gc.collect()
counts[i] = sys.gettotalrefcount()
print(counts)
def load_tests(loader, tests, pattern):
tests.addTest(doctest.DocTestSuite())
return tests

# doctests
from test import test_deque
support.run_doctest(test_deque, verbose)

if __name__ == "__main__":
test_main(verbose=True)
unittest.main()