# HG changeset patch # User Paul Boddie # Date 1490459015 -3600 # Node ID 071b38ef10ea06109de9bff13f328c9914406513 # Parent 05b1244072d864f67d0c54b81440b2d87e6d817b Fixed xrange lengths when the step does not coincide with the range end. diff -r 05b1244072d8 -r 071b38ef10ea lib/__builtins__/span.py --- a/lib/__builtins__/span.py Sat Mar 25 16:41:06 2017 +0100 +++ b/lib/__builtins__/span.py Sat Mar 25 17:23:35 2017 +0100 @@ -73,7 +73,12 @@ "Return the length of the range." - return (self.end - self.start) / self.step + n = (self.end - self.start) / self.step + last = self.start + (n * self.step) + if last == self.end: + return n + else: + return n + 1 def __iter__(self): diff -r 05b1244072d8 -r 071b38ef10ea tests/range.py --- a/tests/range.py Sat Mar 25 16:41:06 2017 +0100 +++ b/tests/range.py Sat Mar 25 17:23:35 2017 +0100 @@ -59,3 +59,9 @@ double = xrange(3, 5, 1) print list(double) # [3, 4] print reduce(lambda x, y: x+y, double) # [7] + +# Test steps not coinciding with the end. + +beyond = xrange(4, 9, 2) +print list(beyond) # [4, 6, 8] +print len(beyond) # 3