]> granicus.if.org Git - python/commitdiff
Make sure the itertools filter functions give the same performance for func=bool...
authorRaymond Hettinger <python@rcn.com>
Mon, 25 Feb 2008 22:42:32 +0000 (22:42 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 25 Feb 2008 22:42:32 +0000 (22:42 +0000)
Lib/test/test_itertools.py
Modules/itertoolsmodule.c

index f5dd0691c803e0baf9274f65aa69351ea1e472da..dc9081ec5aacbb23b5514b0e85e947b663c36a42 100644 (file)
@@ -171,6 +171,7 @@ class TestBasicOps(unittest.TestCase):
     def test_ifilter(self):
         self.assertEqual(list(ifilter(isEven, range(6))), [0,2,4])
         self.assertEqual(list(ifilter(None, [0,1,0,2,0])), [1,2])
+        self.assertEqual(list(ifilter(bool, [0,1,0,2,0])), [1,2])
         self.assertEqual(take(4, ifilter(isEven, count())), [0,2,4,6])
         self.assertRaises(TypeError, ifilter)
         self.assertRaises(TypeError, ifilter, lambda x:x)
@@ -181,6 +182,7 @@ class TestBasicOps(unittest.TestCase):
     def test_ifilterfalse(self):
         self.assertEqual(list(ifilterfalse(isEven, range(6))), [1,3,5])
         self.assertEqual(list(ifilterfalse(None, [0,1,0,2,0])), [0,0,0])
+        self.assertEqual(list(ifilterfalse(bool, [0,1,0,2,0])), [0,0,0])
         self.assertEqual(take(4, ifilterfalse(isEven, count())), [1,3,5,7])
         self.assertRaises(TypeError, ifilterfalse)
         self.assertRaises(TypeError, ifilterfalse, lambda x:x)
index ef15a39d8a00967deacd8cbfe07c81b2cdb83fb3..e53c35347e4f811d5fc628cacac4b6437d0579bb 100644 (file)
@@ -2055,7 +2055,7 @@ ifilter_next(ifilterobject *lz)
                if (item == NULL)
                        return NULL;
 
-               if (lz->func == Py_None) {
+               if (lz->func == Py_None || lz->func == PyBool_Type) {
                        ok = PyObject_IsTrue(item);
                } else {
                        PyObject *good;
@@ -2199,7 +2199,7 @@ ifilterfalse_next(ifilterfalseobject *lz)
                if (item == NULL)
                        return NULL;
 
-               if (lz->func == Py_None) {
+               if (lz->func == Py_None || lz->func == PyBool_Type) {
                        ok = PyObject_IsTrue(item);
                } else {
                        PyObject *good;