@@ -195,6 +195,21 @@ def permutations2(iterable, r=None):
195195 self .assertEqual (len (set (map (id , permutations ('abcde' , 3 )))), 1 )
196196 self .assertNotEqual (len (set (map (id , list (permutations ('abcde' , 3 ))))), 1 )
197197
198+ def test_compress (self ):
199+ self .assertEqual (list (compress ('ABCDEF' , [1 ,0 ,1 ,0 ,1 ,1 ])), list ('ACEF' ))
200+ self .assertEqual (list (compress ('ABCDEF' , [0 ,0 ,0 ,0 ,0 ,0 ])), list ('' ))
201+ self .assertEqual (list (compress ('ABCDEF' , [1 ,1 ,1 ,1 ,1 ,1 ])), list ('ABCDEF' ))
202+ self .assertEqual (list (compress ('ABCDEF' , [1 ,0 ,1 ])), list ('AC' ))
203+ self .assertEqual (list (compress ('ABC' , [0 ,1 ,1 ,1 ,1 ,1 ])), list ('BC' ))
204+ n = 10000
205+ data = chain .from_iterable (repeat (range (6 ), n ))
206+ selectors = chain .from_iterable (repeat ((0 , 1 )))
207+ self .assertEqual (list (compress (data , selectors )), [1 ,3 ,5 ] * n )
208+ self .assertRaises (TypeError , compress , None , range (6 )) # 1st arg not iterable
209+ self .assertRaises (TypeError , compress , range (6 ), None ) # 2nd arg not iterable
210+ self .assertRaises (TypeError , compress , range (6 )) # too few args
211+ self .assertRaises (TypeError , compress , range (6 ), None ) # too many args
212+
198213 def test_count (self ):
199214 self .assertEqual (lzip ('abc' ,count ()), [('a' , 0 ), ('b' , 1 ), ('c' , 2 )])
200215 self .assertEqual (lzip ('abc' ,count (3 )), [('a' , 3 ), ('b' , 4 ), ('c' , 5 )])
@@ -715,6 +730,9 @@ def test_combinations(self):
715730 self .assertEqual (list (combinations (range (4 ), 3 )),
716731 [(0 ,1 ,2 ), (0 ,1 ,3 ), (0 ,2 ,3 ), (1 ,2 ,3 )])
717732
733+ def test_compress (self ):
734+ self .assertEqual (list (compress ('ABCDEF' , [1 ,0 ,1 ,0 ,1 ,1 ])), list ('ACEF' ))
735+
718736 def test_count (self ):
719737 self .assertEqual (list (islice (count (10 ), 5 )), [10 , 11 , 12 , 13 , 14 ])
720738
@@ -795,6 +813,10 @@ def test_combinations(self):
795813 a = []
796814 self .makecycle (combinations ([1 ,2 ,a ,3 ], 3 ), a )
797815
816+ def test_compress (self ):
817+ a = []
818+ self .makecycle (compress ('ABCDEF' , [1 ,0 ,1 ,0 ,1 ,0 ]), a )
819+
798820 def test_cycle (self ):
799821 a = []
800822 self .makecycle (cycle ([a ]* 2 ), a )
@@ -948,6 +970,15 @@ def test_chain(self):
948970 self .assertRaises (TypeError , list , chain (N (s )))
949971 self .assertRaises (ZeroDivisionError , list , chain (E (s )))
950972
973+ def test_compress (self ):
974+ for s in ("123" , "" , range (1000 ), ('do' , 1.2 ), range (2000 ,2200 ,5 )):
975+ n = len (s )
976+ for g in (G , I , Ig , S , L , R ):
977+ self .assertEqual (list (compress (g (s ), repeat (1 ))), list (g (s )))
978+ self .assertRaises (TypeError , compress , X (s ), repeat (1 ))
979+ self .assertRaises (TypeError , compress , N (s ), repeat (1 ))
980+ self .assertRaises (ZeroDivisionError , list , compress (E (s ), repeat (1 )))
981+
951982 def test_product (self ):
952983 for s in ("123" , "" , range (1000 ), ('do' , 1.2 ), range (2000 ,2200 ,5 )):
953984 self .assertRaises (TypeError , product , X (s ))
@@ -1144,7 +1175,7 @@ class SubclassWithKwargsTest(unittest.TestCase):
11441175 def test_keywords_in_subclass (self ):
11451176 # count is not subclassable...
11461177 for cls in (repeat , zip , filter , filterfalse , chain , map ,
1147- starmap , islice , takewhile , dropwhile , cycle ):
1178+ starmap , islice , takewhile , dropwhile , cycle , compress ):
11481179 class Subclass (cls ):
11491180 def __init__ (self , newarg = None , * args ):
11501181 cls .__init__ (self , * args )
@@ -1281,10 +1312,6 @@ def __init__(self, newarg=None, *args):
12811312... s = list(iterable)
12821313... return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
12831314
1284- >>> def compress(data, selectors):
1285- ... "compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F"
1286- ... return (d for d, s in zip(data, selectors) if s)
1287-
12881315>>> def combinations_with_replacement(iterable, r):
12891316... "combinations_with_replacement('ABC', 3) --> AA AB AC BB BC CC"
12901317... pool = tuple(iterable)
@@ -1380,9 +1407,6 @@ def __init__(self, newarg=None, *args):
13801407>>> list(powerset([1,2,3]))
13811408[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
13821409
1383- >>> list(compress('abcdef', [1,0,1,0,1,1]))
1384- ['a', 'c', 'e', 'f']
1385-
13861410>>> list(combinations_with_replacement('abc', 2))
13871411[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]
13881412
0 commit comments