Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit34fe4af

Browse files
[3.12]gh-126618: fix repr(itertools.count(sys.maxsize)) (GH-127048) (#127510)
(cherry picked from commit930ba0c)Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
1 parent34137cb commit34fe4af

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

‎Lib/test/test_itertools.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,15 @@ def test_count(self):
623623
self.assertEqual(next(c),-8)
624624
self.assertEqual(repr(count(10.25)),'count(10.25)')
625625
self.assertEqual(repr(count(10.0)),'count(10.0)')
626+
627+
self.assertEqual(repr(count(maxsize)),f'count({maxsize})')
628+
c=count(maxsize-1)
629+
self.assertEqual(repr(c),f'count({maxsize-1})')
630+
next(c)# c is now at masize
631+
self.assertEqual(repr(c),f'count({maxsize})')
632+
next(c)
633+
self.assertEqual(repr(c),f'count({maxsize+1})')
634+
626635
self.assertEqual(type(next(count(10.0))),float)
627636
foriin (-sys.maxsize-5,-sys.maxsize+5 ,-10,-1,0,10,sys.maxsize-5,sys.maxsize+5):
628637
# Test repr
@@ -703,6 +712,20 @@ def test_count_with_stride(self):
703712
forprotoinrange(pickle.HIGHEST_PROTOCOL+1):
704713
self.pickletest(proto,count(i,j))
705714

715+
c=count(maxsize-2,2)
716+
self.assertEqual(repr(c),f'count({maxsize-2}, 2)')
717+
next(c)# c is now at masize
718+
self.assertEqual(repr(c),f'count({maxsize}, 2)')
719+
next(c)
720+
self.assertEqual(repr(c),f'count({maxsize+2}, 2)')
721+
722+
c=count(maxsize+1,-1)
723+
self.assertEqual(repr(c),f'count({maxsize+1}, -1)')
724+
next(c)# c is now at masize
725+
self.assertEqual(repr(c),f'count({maxsize}, -1)')
726+
next(c)
727+
self.assertEqual(repr(c),f'count({maxsize-1}, -1)')
728+
706729
deftest_cycle(self):
707730
self.assertEqual(take(10,cycle('abc')),list('abcabcabca'))
708731
self.assertEqual(list(cycle('')), [])
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix the representation of:class:`itertools.count` objects when the count
2+
value is:data:`sys.maxsize`.

‎Modules/itertoolsmodule.c‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3981,7 +3981,7 @@ typedef struct {
39813981
39823982
fast_mode: when cnt an integer < PY_SSIZE_T_MAX and no step is specified.
39833983
3984-
assert(cnt != PY_SSIZE_T_MAX &&long_cnt == NULL && long_step==PyLong(1));
3984+
assert(long_cnt == NULL && long_step==PyLong(1));
39853985
Advances with: cnt += 1
39863986
When count hits Y_SSIZE_T_MAX, switch to slow_mode.
39873987
@@ -4037,9 +4037,6 @@ itertools_count_impl(PyTypeObject *type, PyObject *long_cnt,
40374037
PyErr_Clear();
40384038
fast_mode=0;
40394039
}
4040-
elseif (cnt==PY_SSIZE_T_MAX) {
4041-
fast_mode=0;
4042-
}
40434040
}
40444041
}else {
40454042
cnt=0;
@@ -4071,7 +4068,7 @@ itertools_count_impl(PyTypeObject *type, PyObject *long_cnt,
40714068
else
40724069
cnt=PY_SSIZE_T_MAX;
40734070

4074-
assert((cnt!=PY_SSIZE_T_MAX&&long_cnt==NULL&&fast_mode)||
4071+
assert((long_cnt==NULL&&fast_mode)||
40754072
(cnt==PY_SSIZE_T_MAX&&long_cnt!=NULL&& !fast_mode));
40764073
assert(!fast_mode||
40774074
(PyLong_Check(long_step)&&PyLong_AS_LONG(long_step)==1));
@@ -4143,7 +4140,7 @@ count_next(countobject *lz)
41434140
staticPyObject*
41444141
count_repr(countobject*lz)
41454142
{
4146-
if (lz->cnt!=PY_SSIZE_T_MAX)
4143+
if (lz->long_cnt==NULL)
41474144
returnPyUnicode_FromFormat("%s(%zd)",
41484145
_PyType_Name(Py_TYPE(lz)),lz->cnt);
41494146

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp