| import unittest |
| from threading import Barrier, Thread |
| from test.support import threading_helper |
| |
| threading_helper.requires_working_threading(module=True) |
| |
| class TestReversed(unittest.TestCase): |
| |
| @threading_helper.reap_threads |
| def test_reversed(self): |
| # Iterating over the iterator with multiple threads should not |
| # emit TSAN warnings |
| number_of_iterations = 10 |
| number_of_threads = 10 |
| size = 1_000 |
| |
| barrier = Barrier(number_of_threads) |
| def work(r): |
| barrier.wait() |
| while True: |
| try: |
| l = r.__length_hint__() |
| next(r) |
| except StopIteration: |
| break |
| assert 0 <= l <= size |
| x = tuple(range(size)) |
| |
| for _ in range(number_of_iterations): |
| r = reversed(x) |
| worker_threads = [] |
| for _ in range(number_of_threads): |
| worker_threads.append(Thread(target=work, args=[r])) |
| with threading_helper.start_threads(worker_threads): |
| pass |
| barrier.reset() |
| |
| if __name__ == "__main__": |
| unittest.main() |