Skip to content

Commit e41e852

Browse files
committed
Enhance the test case as test_itertools.py
1 parent c9ece31 commit e41e852

File tree

1 file changed

+36
-78
lines changed

1 file changed

+36
-78
lines changed

Lib/test/test_free_threading/test_set.py

Lines changed: 36 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -148,102 +148,60 @@ def read_set():
148148
for t in threads:
149149
t.join()
150150

151+
@threading_helper.reap_threads
151152
def test_length_hint_used_race(self):
152-
s = set(range(2000))
153-
it = iter(s)
154-
155-
NUM_LOOPS = 50_000
156-
barrier = Barrier(2)
153+
NUM_ITERS = 10
154+
NUM_THREADS = 10
155+
NUM_LOOPS = 2_000
157156

158-
def reader():
159-
barrier.wait()
160-
for _ in range(NUM_LOOPS):
161-
it.__length_hint__()
157+
for _ in range(NUM_ITERS):
158+
s = set(range(2000))
159+
it = iter(s)
162160

163-
def writer():
164-
barrier.wait()
165-
i = 0
166-
for _ in range(NUM_LOOPS):
167-
s.add(i)
168-
s.discard(i - 1)
169-
i += 1
161+
def worker():
162+
for i in range(NUM_LOOPS):
163+
it.__length_hint__()
164+
s.add(i)
165+
s.discard(i - 1)
170166

171-
threads = [
172-
Thread(target=reader),
173-
Thread(target=writer),
174-
]
175-
for t in threads:
176-
t.start()
177-
for t in threads:
178-
t.join()
167+
threading_helper.run_concurrently(worker, nthreads=NUM_THREADS)
179168

169+
@threading_helper.reap_threads
180170
def test_length_hint_exhaust_race(self):
181-
NUM_LOOPS = 10_000
182-
INNER_HINTS = 20
183-
barrier = Barrier(2)
184-
box = {"it": None}
171+
NUM_ITERS = 50
172+
NUM_THREADS = 10
185173

186-
def exhauster():
187-
for _ in range(NUM_LOOPS):
188-
s = set(range(256))
189-
box["it"] = iter(s)
190-
barrier.wait() # start together
191-
try:
192-
while True:
193-
next(box["it"])
194-
except StopIteration:
195-
pass
196-
barrier.wait() # end iteration
197-
198-
def reader():
199-
for _ in range(NUM_LOOPS):
200-
barrier.wait()
201-
it = box["it"]
202-
for _ in range(INNER_HINTS):
174+
for _ in range(NUM_ITERS):
175+
s = set(range(256))
176+
it = iter(s)
177+
178+
def worker():
179+
while True:
203180
it.__length_hint__()
204-
barrier.wait()
181+
try:
182+
next(it)
183+
except StopIteration:
184+
break
205185

206-
threads = [
207-
Thread(target=reader),
208-
Thread(target=exhauster),
209-
]
210-
for t in threads:
211-
t.start()
212-
for t in threads:
213-
t.join()
186+
threading_helper.run_concurrently(worker, nthreads=NUM_THREADS)
214187

188+
@threading_helper.reap_threads
215189
def test_iternext_concurrent_exhaust_race(self):
216-
NUM_LOOPS = 20_000
217-
barrier = Barrier(3)
218-
box = {"it": None}
190+
NUM_ITERS = 200
191+
NUM_THREADS = 10
219192

220-
def advancer():
221-
for _ in range(NUM_LOOPS):
222-
barrier.wait()
223-
it = box["it"]
193+
for _ in range(NUM_ITERS):
194+
s = set(range(64))
195+
it = iter(s)
196+
197+
def worker():
224198
while True:
225199
try:
226200
next(it)
227201
except StopIteration:
228202
break
229-
barrier.wait()
230203

231-
def producer():
232-
for _ in range(NUM_LOOPS):
233-
s = set(range(64))
234-
box["it"] = iter(s)
235-
barrier.wait()
236-
barrier.wait()
237-
238-
threads = [
239-
Thread(target=advancer),
240-
Thread(target=advancer),
241-
Thread(target=producer),
242-
]
243-
for t in threads:
244-
t.start()
245-
for t in threads:
246-
t.join()
204+
threading_helper.run_concurrently(worker, nthreads=NUM_THREADS)
247205

248206

249207
@threading_helper.requires_working_threading()

0 commit comments

Comments
 (0)