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

Tim Peters tim_one@users.sourceforge.net
Fri, 07 Sep 2001 21:00:14 -0700


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

Modified Files:
	test_iter.py 
Log Message:
Generalize operator.indexOf (PySequence_Index) to work with any
iterable object.  I'm not sure how that got overlooked before!

Got rid of the internal _PySequence_IterContains, introduced a new
internal _PySequence_IterSearch, and rewrote all the iteration-based
"count of", "index of", and "is the object in it or not?" routines to
just call the new function.  I suppose it's slower this way, but the
code duplication was getting depressing.


Index: test_iter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_iter.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** test_iter.py	2001/08/17 18:39:24	1.18
--- test_iter.py	2001/09/08 04:00:12	1.19
***************
*** 601,604 ****
--- 601,645 ----
                  pass
  
+     # Test iterators with operator.indexOf (PySequence_Index).
+     def test_indexOf(self):
+         from operator import indexOf
+         self.assertEqual(indexOf([1,2,2,3,2,5], 1), 0)
+         self.assertEqual(indexOf((1,2,2,3,2,5), 2), 1)
+         self.assertEqual(indexOf((1,2,2,3,2,5), 3), 3)
+         self.assertEqual(indexOf((1,2,2,3,2,5), 5), 5)
+         self.assertRaises(ValueError, indexOf, (1,2,2,3,2,5), 0)
+         self.assertRaises(ValueError, indexOf, (1,2,2,3,2,5), 6)
+ 
+         self.assertEqual(indexOf("122325", "2"), 1)
+         self.assertEqual(indexOf("122325", "5"), 5)
+         self.assertRaises(ValueError, indexOf, "122325", "6")
+ 
+         self.assertRaises(TypeError, indexOf, 42, 1)
+         self.assertRaises(TypeError, indexOf, indexOf, indexOf)
+ 
+         f = open(TESTFN, "w")
+         try:
+             f.write("a\n" "b\n" "c\n" "d\n" "e\n")
+         finally:
+             f.close()
+         f = open(TESTFN, "r")
+         try:
+             fiter = iter(f)
+             self.assertEqual(indexOf(fiter, "b\n"), 1)
+             self.assertEqual(indexOf(fiter, "d\n"), 1)
+             self.assertEqual(indexOf(fiter, "e\n"), 0)
+             self.assertRaises(ValueError, indexOf, fiter, "a\n")
+         finally:
+             f.close()
+             try:
+                 unlink(TESTFN)
+             except OSError:
+                 pass
+ 
+         iclass = IteratingSequenceClass(3)
+         for i in range(3):
+             self.assertEqual(indexOf(iclass, i), i)
+         self.assertRaises(ValueError, indexOf, iclass, -1)
+ 
      # Test iterators on RHS of unpacking assignments.
      def test_unpack_iter(self):