| 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() |