@@ -73,52 +73,48 @@ def test_map_timeout(self):
7373
7474 self .assertEqual ([None , None ], results )
7575
76- def test_map_buffersize (self ):
77- integers = range (8 )
78-
76+ def test_map_buffersize_validation (self ):
7977 with self .assertRaisesRegex (
8078 ValueError ,
8179 "buffersize must be None or > 0" ,
82- msg = "`Executor.map` should raise if `buffersize` is not positive." ,
8380 ):
84- self .executor .map (str , integers , buffersize = 0 )
85-
86- for buffersize in (1 , 2 , len (integers ), len (integers ) * 2 ):
87- self .assertEqual (
88- list (self .executor .map (str , integers , buffersize = buffersize )),
89- list (map (str , integers )),
90- msg = "`Executor.map` with `buffersize` should behave the same as `map`." ,
91- )
92-
93- self .assertEqual (
94- list (self .executor .map (add , integers , integers , buffersize = buffersize )),
95- list (map (sum , zip (integers , integers ))),
96- msg = "`Executor.map` with `buffersize` should work correctly on multiple input iterables" ,
97- )
98-
99- self .assertEqual (
100- next (self .executor .map (str , itertools .count (), buffersize = buffersize )),
101- next (map (str , integers )),
102- msg = "`Executor.map` with `buffersize` should work correctly on an infinite input iterator." ,
103- )
104-
105- self .assertFalse (
106- list (self .executor .map (str , [], buffersize = buffersize )),
107- msg = "`Executor.map` with `buffersize` should return an empty iterator if the input iterable is empty." ,
108- )
109-
110- self .assertFalse (
111- list (self .executor .map (str , buffersize = buffersize )),
112- msg = "`Executor.map` with `buffersize` should return an empty iterator if no input iterable is provided." ,
113- )
114-
115- integers_iter = iter (integers )
116- self .executor .map (str , integers_iter , buffersize = buffersize )
117- self .executor .shutdown (wait = True ) # wait for pending tasks to complete
81+ self .executor .map (str , range (4 ), buffersize = 0 )
82+
83+ def test_map_buffersize (self ):
84+ ints = range (4 )
85+ for buffersize in (1 , 2 , len (ints ), len (ints ) * 2 ):
86+ with self .subTest (buffersize = buffersize ):
87+ res = self .executor .map (str , ints , buffersize = buffersize )
88+ self .assertEqual (list (res ), ["0" , "1" , "2" , "3" ])
89+
90+ def test_map_buffersize_on_multiple_iterables (self ):
91+ ints = range (4 )
92+ for buffersize in (1 , 2 , len (ints ), len (ints ) * 2 ):
93+ with self .subTest (buffersize = buffersize ):
94+ res = self .executor .map (add , ints , ints , buffersize = buffersize )
95+ self .assertEqual (list (res ), [0 , 2 , 4 , 6 ])
96+
97+ def test_map_buffersize_on_infinite_iterable (self ):
98+ res = self .executor .map (str , itertools .count (), buffersize = 2 )
99+ self .assertEqual (next (res , None ), "0" )
100+
101+ def test_map_buffersize_on_empty_iterable (self ):
102+ res = self .executor .map (str , [], buffersize = 2 )
103+ self .assertIsNone (next (res , None ))
104+
105+ def test_map_buffersize_without_iterable (self ):
106+ res = self .executor .map (str , buffersize = 2 )
107+ self .assertIsNone (next (res , None ))
108+
109+ def test_map_buffersize_when_buffer_is_full (self ):
110+ ints = iter (range (4 ))
111+ buffersize = 2
112+ self .executor .map (str , ints , buffersize = buffersize )
113+ self .executor .shutdown (wait = True ) # wait for tasks to complete
118114 self .assertEqual (
119- next (integers_iter ),
115+ next (ints ),
120116 buffersize ,
121- msg = "`Executor.map` should pull only the first `buffersize` elements from the input iterable ." ,
117+ msg = "should have fetched only `buffersize` elements from `ints` ." ,
122118 )
123119
124120 def test_shutdown_race_issue12456 (self ):
0 commit comments