Author: Philip Jenvey <pjen...@underboss.org>
Branch: length-hint
Changeset: r57874:2ec86d638139
Date: 2012-10-07 15:27 -0700
http://bitbucket.org/pypy/pypy/changeset/2ec86d638139/

Log:    fix itertools length_hint returning a negative length

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
@@ -92,7 +92,7 @@
             self.count = 0
         else:
             self.counting = True
-            self.count = self.space.int_w(w_times)
+            self.count = max(self.space.int_w(w_times), 0)
 
     def next_w(self):
         if self.counting:
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
@@ -90,11 +90,15 @@
 
     def test_repeat_len(self):
         import itertools
+        import operator
 
         r = itertools.repeat('a', 15)
         r.next()
         raises(TypeError, "len(itertools.repeat('xkcd'))")
 
+        r = itertools.repeat('a', -3)
+        assert operator._length_hint(r, 3) == 0
+
     def test_takewhile(self):
         import itertools
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to