Skip to content

Commit 7639779

Browse files
committed
add tests for FT build
1 parent fe83c85 commit 7639779

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import unittest
2+
from threading import Thread, Barrier
3+
from itertools import serialize
4+
from test.support import threading_helper
5+
6+
7+
threading_helper.requires_working_threading(module=True)
8+
9+
class non_atomic_iterator:
10+
11+
def __init__(self, it):
12+
self.it = iter(it)
13+
14+
def __iter__(self):
15+
return self
16+
17+
def __next__(self):
18+
a = next(self.it)
19+
b = next(self.it)
20+
return a, b
21+
22+
def count():
23+
i = 0
24+
while True:
25+
i += 1
26+
yield i
27+
28+
class SerializeThreading(unittest.TestCase):
29+
30+
@threading_helper.reap_threads
31+
def test_serialize(self):
32+
number_of_threads = 10
33+
number_of_iterations = 10
34+
barrier = Barrier(number_of_threads)
35+
def work(it):
36+
while True:
37+
try:
38+
a, b = next(it)
39+
assert a + 1 == b
40+
except StopIteration:
41+
break
42+
43+
data = tuple(range(400))
44+
for it in range(number_of_iterations):
45+
serialize_iterator = serialize(non_atomic_iterator(data,))
46+
worker_threads = []
47+
for ii in range(number_of_threads):
48+
worker_threads.append(
49+
Thread(target=work, args=[serialize_iterator]))
50+
51+
with threading_helper.start_threads(worker_threads):
52+
pass
53+
54+
barrier.reset()
55+
56+
@threading_helper.reap_threads
57+
def test_serialize_generator(self):
58+
number_of_threads = 5
59+
number_of_iterations = 4
60+
barrier = Barrier(number_of_threads)
61+
def work(it):
62+
barrier.wait()
63+
for _ in range(1_000):
64+
try:
65+
next(it)
66+
except StopIteration:
67+
break
68+
69+
for it in range(number_of_iterations):
70+
generator = serialize(count())
71+
worker_threads = []
72+
for ii in range(number_of_threads):
73+
worker_threads.append(
74+
Thread(target=work, args=[generator]))
75+
76+
with threading_helper.start_threads(worker_threads):
77+
pass
78+
79+
barrier.reset()
80+
81+
if __name__ == "__main__":
82+
unittest.main()

0 commit comments

Comments
 (0)