diff -r 95badf936353 Lib/test/test_itertools.py --- a/Lib/test/test_itertools.py Wed Oct 02 22:31:47 2013 +1000 +++ b/Lib/test/test_itertools.py Wed Oct 02 22:36:34 2013 +0800 @@ -947,7 +947,6 @@ self.assertEqual(list(repeat('a', 3)), ['a', 'a', 'a']) self.assertEqual(take(3, repeat('a')), ['a', 'a', 'a']) self.assertEqual(list(repeat('a', 0)), []) - self.assertEqual(list(repeat('a', -3)), []) self.assertRaises(TypeError, repeat) self.assertRaises(TypeError, repeat, None, 3, 4) self.assertRaises(TypeError, repeat, None, 'a') @@ -965,6 +964,11 @@ self.assertEqual(take(2, copy.deepcopy(c)), list('a' * 2)) self.pickletest(repeat(object='a', times=10)) + def test_repeat_with_negative_times(self): + self.assertEqual(repr(repeat('a', -1)), "repeat('a')") + self.assertEqual(repr(repeat('a', times=-1)), "repeat('a')") + self.assertEqual(repr(repeat('a', times=-2)), "repeat('a')") + def test_map(self): self.assertEqual(list(map(operator.pow, range(3), range(1,7))), [0**1, 1**2, 2**3]) diff -r 95badf936353 Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c Wed Oct 02 22:31:47 2013 +1000 +++ b/Modules/itertoolsmodule.c Wed Oct 02 22:36:34 2013 +0800 @@ -4046,9 +4046,6 @@ &element, &cnt)) return NULL; - if (PyTuple_Size(args) == 2 && cnt < 0) - cnt = 0; - ro = (repeatobject *)type->tp_alloc(type, 0); if (ro == NULL) return NULL; @@ -4087,7 +4084,7 @@ static PyObject * repeat_repr(repeatobject *ro) { - if (ro->cnt == -1) + if (ro->cnt < 0) return PyUnicode_FromFormat("repeat(%R)", ro->element); else return PyUnicode_FromFormat("repeat(%R, %zd)", ro->element, ro->cnt); @@ -4096,7 +4093,7 @@ static PyObject * repeat_len(repeatobject *ro) { - if (ro->cnt == -1) { + if (ro->cnt < 0) { PyErr_SetString(PyExc_TypeError, "len() of unsized object"); return NULL; } @@ -4125,8 +4122,8 @@ PyDoc_STRVAR(repeat_doc, "repeat(object [,times]) -> create an iterator which returns the object\n\ -for the specified number of times. If not specified, returns the object\n\ -endlessly."); +for the specified number of times. If not specified or times is a\n\ +negative integer, returns the object endlessly."); static PyTypeObject repeat_type = { PyVarObject_HEAD_INIT(NULL, 0)