From d356b204da7085a8e1c47b064b0c41b582f56531 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Tue, 25 Dec 2018 11:33:02 +0900 Subject: [PATCH] py: Fix range to support negative step --- py/range.go | 6 +++++- py/tests/range.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/py/range.go b/py/range.go index 4dc0358e..922a235d 100644 --- a/py/range.go +++ b/py/range.go @@ -98,7 +98,11 @@ func (it *RangeIterator) M__iter__() (Object, error) { // Range iterator next func (it *RangeIterator) M__next__() (Object, error) { r := it.Index - if r >= it.Stop { + if it.Step >= 0 && r >= it.Stop { + return nil, StopIteration + } + + if it.Step < 0 && r <= it.Stop { return nil, StopIteration } it.Index += it.Step diff --git a/py/tests/range.py b/py/tests/range.py index 327ecfa5..968778bb 100644 --- a/py/tests/range.py +++ b/py/tests/range.py @@ -13,4 +13,9 @@ b = [e for e in a] assert len(a) == len(b) +a = range(100, 0, -1) +b = [e for e in a] +assert len(a) == 100 +assert len(b) == 100 + doc="finished"