Skip to content
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()