""" Tests for `tqdm.contrib.concurrent`. """ from warnings import catch_warnings from tqdm.contrib.concurrent import thread_map, process_map from tests_tqdm import with_setup, pretest, posttest, SkipTest, StringIO, \ closing def incr(x): """Dummy function""" return x + 1 @with_setup(pretest, posttest) def test_thread_map(): """Test contrib.concurrent.thread_map""" with closing(StringIO()) as our_file: a = range(9) b = [i + 1 for i in a] try: assert thread_map(lambda x: x + 1, a, file=our_file) == b except ImportError: raise SkipTest assert thread_map(incr, a, file=our_file) == b @with_setup(pretest, posttest) def test_process_map(): """Test contrib.concurrent.process_map""" with closing(StringIO()) as our_file: a = range(9) b = [i + 1 for i in a] try: assert process_map(incr, a, file=our_file) == b except ImportError: raise SkipTest def test_chunksize_warning(): """Test contrib.concurrent.process_map chunksize warnings""" try: from unittest.mock import patch except ImportError: raise SkipTest for iterables, should_warn in [ ([], False), (['x'], False), ([()], False), (['x', ()], False), (['x' * 1001], True), (['x' * 100, ('x',) * 1001], True), ]: with patch('tqdm.contrib.concurrent._executor_map'): with catch_warnings(record=True) as w: process_map(incr, *iterables) assert should_warn == bool(w)