@@ -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
11401081if __name__ == "__main__" :
0 commit comments