[Python-checkins] CVS: python/dist/src/Lib/test test_iter.py,1.3,1.4

Tim Peters tim_one@users.sourceforge.net
Wed, 02 May 2001 00:39:40 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv11690/python/dist/src/Lib/test

Modified Files:
	test_iter.py 
Log Message:
Generalize filter(f, seq) to work with iterators.  This also generalizes
filter() to no longer insist that len(seq) be defined.
NEEDS DOC CHANGES.


Index: test_iter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_iter.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** test_iter.py	2001/05/01 20:45:30	1.3
--- test_iter.py	2001/05/02 07:39:38	1.4
***************
*** 276,278 ****
--- 276,322 ----
                  pass
  
+     # Test filter()'s use of iterators.
+     def test_builtin_filter(self):
+         self.assertEqual(filter(None, SequenceClass(5)), range(1, 5))
+         self.assertEqual(filter(None, SequenceClass(0)), [])
+         self.assertEqual(filter(None, ()), ())
+         self.assertEqual(filter(None, "abc"), "abc")
+ 
+         d = {"one": 1, "two": 2, "three": 3}
+         self.assertEqual(filter(None, d), d.keys())
+ 
+         self.assertRaises(TypeError, filter, None, list)
+         self.assertRaises(TypeError, filter, None, 42)
+ 
+         class Boolean:
+             def __init__(self, truth):
+                 self.truth = truth
+             def __nonzero__(self):
+                 return self.truth
+         True = Boolean(1)
+         False = Boolean(0)
+ 
+         class Seq:
+             def __init__(self, *args):
+                 self.vals = args
+             def __iter__(self):
+                 class SeqIter:
+                     def __init__(self, vals):
+                         self.vals = vals
+                         self.i = 0
+                     def __iter__(self):
+                         return self
+                     def next(self):
+                         i = self.i
+                         self.i = i + 1
+                         if i < len(self.vals):
+                             return self.vals[i]
+                         else:
+                             raise StopIteration
+                 return SeqIter(self.vals)
+ 
+         seq = Seq(*([True, False] * 25))
+         self.assertEqual(filter(lambda x: not x, seq), [False]*25)
+         self.assertEqual(filter(lambda x: not x, iter(seq)), [False]*25)
+ 
  run_unittest(TestCase)