From 553454340be50d8c3d948d191d83e25905472cdb Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 19 Sep 2018 22:58:19 -0700 Subject: [PATCH 1/4] Initially, bound one block at a time --- Lib/test/test_deque.py | 5 +++++ Modules/_collectionsmodule.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index 921136069d7722..0f9912cecfb887 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -288,6 +288,11 @@ def test_index(self): else: self.assertEqual(d.index(element, start, stop), target) + # Test large start argument + d = deque(range(0, 10000, 10)) + i = d.index(9500, 900) + self.assertEqual(d[i], 9500) + def test_index_bug_24913(self): d = deque('A' * 3) with self.assertRaises(ValueError): diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 935b4348a8ff8b..e9a432be2ee632 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1050,8 +1050,10 @@ deque_index(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) start = stop; assert(0 <= start && start <= stop && stop <= Py_SIZE(deque)); - /* XXX Replace this loop with faster code from deque_item() */ - for (i=0 ; irightlink; + } + for ( ; irightlink; From d62453c103eaeea5030f6f7fa06ea55fc9545766 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 19 Sep 2018 22:59:44 -0700 Subject: [PATCH 2/4] Fix indentation --- Modules/_collectionsmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index e9a432be2ee632..ba48076c643fe0 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1051,7 +1051,7 @@ deque_index(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) assert(0 <= start && start <= stop && stop <= Py_SIZE(deque)); for (i=0 ; irightlink; + b = b->rightlink; } for ( ; i Date: Fri, 21 Sep 2018 00:22:37 -0700 Subject: [PATCH 3/4] Add spaces as requested --- Modules/_collectionsmodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index ba48076c643fe0..267cf07f1f72a3 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1050,10 +1050,10 @@ deque_index(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) start = stop; assert(0 <= start && start <= stop && stop <= Py_SIZE(deque)); - for (i=0 ; irightlink; } - for ( ; irightlink; From f3322aa86be7209a856987bd7172d2dcdc150b44 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 21 Sep 2018 00:38:16 -0700 Subject: [PATCH 4/4] Expand test to cover different starting offsets --- Lib/test/test_deque.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index 0f9912cecfb887..51b66b76aca91d 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -290,8 +290,11 @@ def test_index(self): # Test large start argument d = deque(range(0, 10000, 10)) - i = d.index(9500, 900) - self.assertEqual(d[i], 9500) + for step in range(100): + i = d.index(8500, 700) + self.assertEqual(d[i], 8500) + # Repeat test with a different internal offset + d.rotate() def test_index_bug_24913(self): d = deque('A' * 3)