Skip to content

Commit 9339f37

Browse files
committed
chore: py queue and c queue size of
1 parent faf79d4 commit 9339f37

File tree

1 file changed

+43
-102
lines changed

1 file changed

+43
-102
lines changed

Lib/test/test_queue.py

Lines changed: 43 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,74 +1009,38 @@ class C:
10091009
gc_collect() # For PyPy or other GCs.
10101010
self.assertIsNone(wr())
10111011

1012-
def test_sizeof(self):
1013-
q = self.q
10141012

1015-
empty_size = q.__sizeof__()
1016-
self.assertGreater(empty_size, 0, "Empty queue should have non-zero size")
10171013

1018-
for i in range(8):
1019-
q.put(object())
10201014

1021-
size_after_8 = q.__sizeof__()
1022-
# Size may or may not change depending on implementation
1023-
# C implementation: no change (still within initial ring buffer capacity)
1024-
# Python implementation: may change (deque growth, but __sizeof__ may not reflect it)
1015+
class PySimpleQueueTest(BaseSimpleQueueTest, unittest.TestCase):
10251016

1026-
# Add one more item to potentially trigger growth
1027-
q.put(object()) # Now 9 items
1017+
queue = py_queue
1018+
def setUp(self):
1019+
self.type2test = self.queue._PySimpleQueue
1020+
super().setUp()
10281021

1022+
def test_sizeof(self):
1023+
q = self.type2test()
1024+
1025+
empty_size = q.__sizeof__()
1026+
self.assertGreater(empty_size, 0)
1027+
1028+
for i in range(8):
1029+
q.put(object())
1030+
1031+
size_after_8 = q.__sizeof__()
1032+
1033+
q.put(object())
10291034
size_after_9 = q.__sizeof__()
10301035
self.assertGreaterEqual(size_after_9, size_after_8)
1031-
1032-
# Test with a larger number of items
1036+
10331037
large_q = self.type2test()
10341038
for i in range(1000):
10351039
large_q.put(object())
1036-
1040+
10371041
large_size = large_q.__sizeof__()
1042+
self.assertGreater(large_size, 0)
10381043

1039-
# For C implementation, size should grow with capacity
1040-
# For Python implementation, __sizeof__ will not account for underlying deque
1041-
# (this is documented behavior on CPython; PyPy doesn't support __sizeof__ at all)
1042-
if self.__class__.__name__ == 'CSimpleQueueTest':
1043-
# This is the C implementation
1044-
self.assertGreater(large_size, empty_size,
1045-
"C SimpleQueue with many items should be larger than empty queue")
1046-
1047-
# Verify size is reasonable (should be proportional to capacity)
1048-
# For very large queues, size should be significantly larger
1049-
self.assertGreater(large_size, empty_size * 2,
1050-
"Large C SimpleQueue should be at least 2x size of empty queue")
1051-
else:
1052-
# This is the Python implementation
1053-
# The Python implementation doesn't override __sizeof__
1054-
# so it only accounts for the object itself, not the underlying deque
1055-
self.assertGreater(large_size, 0, "Python SimpleQueue should have positive size")
1056-
1057-
1058-
class PySimpleQueueTest(BaseSimpleQueueTest, unittest.TestCase):
1059-
1060-
queue = py_queue
1061-
def setUp(self):
1062-
self.type2test = self.queue._PySimpleQueue
1063-
super().setUp()
1064-
1065-
def test_equality(self):
1066-
# Test that SimpleQueue uses object identity, not value equality
1067-
q1 = self.type2test()
1068-
q2 = self.type2test()
1069-
1070-
# Different instances should not be equal
1071-
self.assertNotEqual(q1, q2)
1072-
1073-
# Same instance should be equal to itself
1074-
self.assertEqual(q1, q1)
1075-
1076-
# Even with same content, instances should not be equal
1077-
q1.put('test')
1078-
q2.put('test')
1079-
self.assertNotEqual(q1, q2)
10801044

10811045

10821046
@need_c_queue
@@ -1088,53 +1052,30 @@ def setUp(self):
10881052
self.type2test = self.queue.SimpleQueue
10891053
super().setUp()
10901054

1091-
def test_is_default(self):
1092-
self.assertIs(self.type2test, self.queue.SimpleQueue)
1093-
self.assertIs(self.type2test, self.queue.SimpleQueue)
1094-
1095-
def test_equality(self):
1096-
# Test that SimpleQueue uses object identity, not value equality
1097-
q1 = self.type2test()
1098-
q2 = self.type2test()
1099-
1100-
# Different instances should not be equal
1101-
self.assertNotEqual(q1, q2)
1102-
1103-
# Same instance should be equal to itself
1104-
self.assertEqual(q1, q1)
1105-
1106-
# Even with same content, instances should not be equal
1107-
q1.put('test')
1108-
q2.put('test')
1109-
self.assertNotEqual(q1, q2)
1110-
1111-
def test_reentrancy(self):
1112-
# bpo-14976: put() may be called reentrantly in an asynchronous
1113-
# callback.
1114-
q = self.q
1115-
gen = itertools.count()
1116-
N = 10000
1117-
results = []
1118-
1119-
# This test exploits the fact that __del__ in a reference cycle
1120-
# can be called any time the GC may run.
1121-
1122-
class Circular(object):
1123-
def __init__(self):
1124-
self.circular = self
1125-
1126-
def __del__(self):
1127-
q.put(next(gen))
1128-
1129-
while True:
1130-
o = Circular()
1131-
q.put(next(gen))
1132-
del o
1133-
results.append(q.get())
1134-
if results[-1] >= N:
1135-
break
1055+
def test_sizeof(self):
1056+
q = self.type2test()
1057+
1058+
empty_size = q.__sizeof__()
1059+
self.assertGreater(empty_size, 0, "Empty C SimpleQueue should have non-zero size")
1060+
1061+
for i in range(8):
1062+
q.put(object())
1063+
1064+
size_after_8 = q.__sizeof__()
11361065

1137-
self.assertEqual(results, list(range(N + 1)))
1066+
q.put(object())
1067+
size_after_9 = q.__sizeof__()
1068+
self.assertGreaterEqual(size_after_9, size_after_8)
1069+
1070+
large_q = self.type2test()
1071+
for i in range(1000):
1072+
large_q.put(object())
1073+
1074+
large_size = large_q.__sizeof__()
1075+
1076+
self.assertGreater(large_size, empty_size)
1077+
1078+
self.assertGreater(large_size, empty_size * 2)
11381079

11391080

11401081
if __name__ == "__main__":

0 commit comments

Comments
 (0)