[pypy-commit] pypy default: Add support for floats as parameters to itertools.islice. Improves compatibility with CPython.

jonaspf pypy.commits at gmail.com
Fri Jan 8 13:09:57 EST 2016


Author: Jonas Pfannschmidt <jonas.pfannschmidt at gmail.com>
Branch: 
Changeset: r81629:8ba0a03b22db
Date: 2016-01-08 12:22 +0000
http://bitbucket.org/pypy/pypy/changeset/8ba0a03b22db/

Log:	Add support for floats as parameters to itertools.islice. Improves
	compatibility with CPython.

diff --git a/pypy/module/itertools/interp_itertools.py b/pypy/module/itertools/interp_itertools.py
--- a/pypy/module/itertools/interp_itertools.py
+++ b/pypy/module/itertools/interp_itertools.py
@@ -372,7 +372,7 @@
     def arg_int_w(self, w_obj, minimum, errormsg):
         space = self.space
         try:
-            result = space.int_w(w_obj)
+            result = space.int_w(space.int(w_obj))    # CPython allows floats as parameters
         except OperationError, e:
             if e.async(space):
                 raise
diff --git a/pypy/module/itertools/test/test_itertools.py b/pypy/module/itertools/test/test_itertools.py
--- a/pypy/module/itertools/test/test_itertools.py
+++ b/pypy/module/itertools/test/test_itertools.py
@@ -225,6 +225,12 @@
             assert it.next() == x
         raises(StopIteration, it.next)
 
+        # CPython implementation allows floats
+        it = itertools.islice([1, 2, 3, 4, 5], 0.0, 3.0, 2.0)
+        for x in [1, 3]:
+            assert it.next() == x
+        raises(StopIteration, it.next)
+
         it = itertools.islice([1, 2, 3], 0, None)
         for x in [1, 2, 3]:
             assert it.next() == x


More information about the pypy-commit mailing list