Skip to content

Commit 9f1b3a6

Browse files
fix: take count into account when using underlying hint
1 parent e14996a commit 9f1b3a6

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

Lib/test/test_itertools.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,17 @@ def __index__(self):
12311231
list(it) # exhaust
12321232
self.assertEqual(it.__length_hint__(), 0)
12331233

1234+
it = islice(iter(range(10)), 2, None, 2)
1235+
self.assertEqual(it.__length_hint__(), 4) # indices 2, 4, 6, 8
1236+
next(it) # yields 2
1237+
self.assertEqual(it.__length_hint__(), 3) # indices 4, 6, 8
1238+
next(it) # yields 4
1239+
self.assertEqual(it.__length_hint__(), 2) # indices 6, 8
1240+
next(it) # yields 6
1241+
self.assertEqual(it.__length_hint__(), 1) # index 8
1242+
next(it) # yields 8
1243+
self.assertEqual(it.__length_hint__(), 0)
1244+
12341245
def test_takewhile(self):
12351246
data = [1, 3, 5, 20, 2, 4, 6, 8]
12361247
self.assertEqual(list(takewhile(underten, data)), [1, 3, 5])

Modules/itertoolsmodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@ islice_length_hint(PyObject *op, PyObject *Py_UNUSED(dummy))
16761676
/* propagate exception */
16771677
return NULL;
16781678
}
1679-
remaining = hint - lz->next;
1679+
remaining = hint - (lz->next - lz->cnt);
16801680
} else {
16811681
remaining = lz->stop - lz->next;
16821682
}

0 commit comments

Comments
 (0)