@@ -91,6 +91,64 @@ def copy_back_and_forth(b, l):
9191 with threading_helper .start_threads (threads ):
9292 pass
9393
94+ def test_reverse (self ):
95+ def reverse_list (b , l ):
96+ b .wait ()
97+ for _ in range (100 ):
98+ l .reverse ()
99+
100+ def reader_list (b , l ):
101+ b .wait ()
102+ for _ in range (100 ):
103+ for i in range (10 ):
104+ self .assertTrue (0 <= l [i ] < 10 )
105+
106+ l = list (range (10 ))
107+ barrier = Barrier (2 )
108+ threads = [Thread (target = reverse_list , args = (barrier , l )),
109+ Thread (target = reader_list , args = (barrier , l ))]
110+ with threading_helper .start_threads (threads ):
111+ pass
112+
113+ def test_slice_assignment1 (self ):
114+ def assign_slice (b , l ):
115+ b .wait ()
116+ for _ in range (100 ):
117+ l [2 :5 ] = [7 , 8 , 9 ]
118+
119+ def reader_list (b , l ):
120+ b .wait ()
121+ for _ in range (100 ):
122+ self .assertIn (l [2 ], (2 , 7 ))
123+ self .assertIn (l [3 ], (3 , 8 ))
124+ self .assertIn (l [4 ], (4 , 9 ))
125+
126+ l = list (range (10 ))
127+ barrier = Barrier (2 )
128+ threads = [Thread (target = assign_slice , args = (barrier , l )),
129+ Thread (target = reader_list , args = (barrier , l ))]
130+ with threading_helper .start_threads (threads ):
131+ pass
132+
133+ def test_slice_assignment2 (self ):
134+ def assign_slice (b , l ):
135+ b .wait ()
136+ for _ in range (100 ):
137+ l [::2 ] = [10 , 11 , 12 , 13 , 14 ]
138+
139+ def reader_list (b , l ):
140+ b .wait ()
141+ for _ in range (100 ):
142+ for i in range (0 , 10 , 2 ):
143+ self .assertIn (l [i ], (i , 10 + i // 2 ))
144+
145+ l = list (range (10 ))
146+ barrier = Barrier (2 )
147+ threads = [Thread (target = assign_slice , args = (barrier , l )),
148+ Thread (target = reader_list , args = (barrier , l ))]
149+ with threading_helper .start_threads (threads ):
150+ pass
151+
94152
95153if __name__ == "__main__" :
96154 unittest .main ()
0 commit comments