import unittest from itertools import accumulate, batched, chain, combinations_with_replacement, cycle, permutations from test.support import threading_helper threading_helper.requires_working_threading(module=True) def work_iterator(it): while True: try: next(it) except StopIteration: break class ItertoolsThreading(unittest.TestCase): @threading_helper.reap_threads def test_accumulate(self): number_of_iterations = 10 for _ in range(number_of_iterations): it = accumulate(tuple(range(40))) threading_helper.run_concurrently(work_iterator, nthreads=10, args=[it]) @threading_helper.reap_threads def test_batched(self): number_of_iterations = 10 for _ in range(number_of_iterations): it = batched(tuple(range(1000)), 2) threading_helper.run_concurrently(work_iterator, nthreads=10, args=[it]) @threading_helper.reap_threads def test_cycle(self): def work(it): for _ in range(400): next(it) number_of_iterations = 6 for _ in range(number_of_iterations): it = cycle((1, 2, 3, 4)) threading_helper.run_concurrently(work, nthreads=6, args=[it]) @threading_helper.reap_threads def test_chain(self): number_of_iterations = 10 for _ in range(number_of_iterations): it = chain(*[(1,)] * 200) threading_helper.run_concurrently(work_iterator, nthreads=6, args=[it]) @threading_helper.reap_threads def test_combinations_with_replacement(self): number_of_iterations = 6 for _ in range(number_of_iterations): it = combinations_with_replacement(tuple(range(2)), 2) threading_helper.run_concurrently(work_iterator, nthreads=6, args=[it]) @threading_helper.reap_threads def test_permutations(self): number_of_iterations = 6 for _ in range(number_of_iterations): it = permutations(tuple(range(4)), 2) threading_helper.run_concurrently(work_iterator, nthreads=6, args=[it]) if __name__ == "__main__": unittest.main()