@@ -2916,21 +2916,45 @@ def test_async_timeout(self):
29162916 p .join ()
29172917
29182918 def test_imap (self ):
2919- it = self .pool . imap ( sqr , list ( range ( 10 )))
2920- self . assertEqual ( list ( it ), list ( map ( sqr , list ( range ( 10 )))))
2921-
2922- it = self . pool . imap ( sqr , list ( range ( 10 )))
2923- for i in range ( 10 ):
2924- self . assertEqual ( next ( it ), i * i )
2925- self . assertRaises ( StopIteration , it . __next__ )
2919+ optimal_buffersize = 4 # ` self.pool` size
2920+ buffersize_variants = [
2921+ { "buffersize" : None },
2922+ { "buffersize" : 1 },
2923+ { "buffersize" : optimal_buffersize },
2924+ { "buffersize" : optimal_buffersize * 2 },
2925+ ]
29262926
2927- it = self .pool .imap (sqr , list (range (1000 )), chunksize = 100 )
2928- for i in range (1000 ):
2929- self .assertEqual (next (it ), i * i )
2930- self .assertRaises (StopIteration , it .__next__ )
2927+ for kwargs in ({}, * buffersize_variants ):
2928+ with self .subTest (** kwargs ):
2929+ iterable = range (10 )
2930+ if self .TYPE != "threads" :
2931+ iterable = list (iterable )
2932+ it = self .pool .imap (sqr , iterable , ** kwargs )
2933+ self .assertEqual (list (it ), list (map (sqr , list (range (10 )))))
2934+
2935+ iterable = range (10 )
2936+ if self .TYPE != "threads" :
2937+ iterable = list (iterable )
2938+ it = self .pool .imap (sqr , iterable , ** kwargs )
2939+ for i in range (10 ):
2940+ self .assertEqual (next (it ), i * i )
2941+ self .assertRaises (StopIteration , it .__next__ )
2942+
2943+ for kwargs in (
2944+ {"chunksize" : 100 },
2945+ {"chunksize" : 100 , "buffersize" : optimal_buffersize },
2946+ ):
2947+ with self .subTest (** kwargs ):
2948+ iterable = range (1000 )
2949+ if self .TYPE != "threads" :
2950+ iterable = list (iterable )
2951+ it = self .pool .imap (sqr , iterable , ** kwargs )
2952+ for i in range (1000 ):
2953+ self .assertEqual (next (it ), i * i )
2954+ self .assertRaises (StopIteration , it .__next__ )
29312955
29322956 def test_imap_fast_iterable_with_slow_task (self ):
2933- if self .TYPE in ( "processes" , "manager" ) :
2957+ if self .TYPE != "threads" :
29342958 self .skipTest ("test not appropriate for {}" .format (self .TYPE ))
29352959
29362960 processes = 4
@@ -2957,7 +2981,7 @@ def produce_args():
29572981 p .join ()
29582982
29592983 def test_imap_fast_iterable_with_slow_task_and_buffersize (self ):
2960- if self .TYPE in ( "processes" , "manager" ) :
2984+ if self .TYPE != "threads" :
29612985 self .skipTest ("test not appropriate for {}" .format (self .TYPE ))
29622986
29632987 processes = 4
@@ -3014,11 +3038,32 @@ def test_imap_handle_iterable_exception(self):
30143038 self .assertRaises (SayWhenError , it .__next__ )
30153039
30163040 def test_imap_unordered (self ):
3017- it = self .pool .imap_unordered (sqr , list (range (10 )))
3018- self .assertEqual (sorted (it ), list (map (sqr , list (range (10 )))))
3041+ optimal_buffersize = 4 # `self.pool` size
3042+ buffersize_variants = [
3043+ {"buffersize" : None },
3044+ {"buffersize" : 1 },
3045+ {"buffersize" : optimal_buffersize },
3046+ {"buffersize" : optimal_buffersize * 2 },
3047+ ]
30193048
3020- it = self .pool .imap_unordered (sqr , list (range (1000 )), chunksize = 100 )
3021- self .assertEqual (sorted (it ), list (map (sqr , list (range (1000 )))))
3049+ for kwargs in ({}, * buffersize_variants ):
3050+ with self .subTest (** kwargs ):
3051+ iterable = range (10 )
3052+ if self .TYPE != "threads" :
3053+ iterable = list (iterable )
3054+ it = self .pool .imap_unordered (sqr , iterable , ** kwargs )
3055+ self .assertEqual (sorted (it ), list (map (sqr , list (range (10 )))))
3056+
3057+ for kwargs in (
3058+ {"chunksize" : 100 },
3059+ {"chunksize" : 100 , "buffersize" : optimal_buffersize },
3060+ ):
3061+ with self .subTest (** kwargs ):
3062+ iterable = range (1000 )
3063+ if self .TYPE != "threads" :
3064+ iterable = list (iterable )
3065+ it = self .pool .imap_unordered (sqr , iterable , ** kwargs )
3066+ self .assertEqual (sorted (it ), list (map (sqr , list (range (1000 )))))
30223067
30233068 def test_imap_unordered_handle_iterable_exception (self ):
30243069 if self .TYPE == 'manager' :
0 commit comments