diff --git a/src/main/java/com/annimon/ownlang/modules/std/std_range.java b/src/main/java/com/annimon/ownlang/modules/std/std_range.java index 19e8c9c..fdad682 100644 --- a/src/main/java/com/annimon/ownlang/modules/std/std_range.java +++ b/src/main/java/com/annimon/ownlang/modules/std/std_range.java @@ -134,7 +134,7 @@ public final class std_range implements Function { @Override public boolean hasNext() { - return value < toInt; + return (stepInt > 0) ? (value < toInt) : (value > toInt); } @Override @@ -154,7 +154,7 @@ public final class std_range implements Function { @Override public boolean hasNext() { - return value < to; + return (step > 0) ? (value < to) : (value > to); } @Override diff --git a/src/test/resources/modules/std/range.own b/src/test/resources/modules/std/range.own index ae616db..85a60ed 100644 --- a/src/test/resources/modules/std/range.own +++ b/src/test/resources/modules/std/range.own @@ -28,6 +28,18 @@ def testRangeParamsReversed() { assertEquals(5, x[5]) } +def testRangeIterator() { + x = range(0, 9, 2) + arr = reduce(x, [], def(acc, e) = acc += e) + assertEquals([0, 2, 4, 6, 8], arr) +} + +def testRangeReversedIterator() { + x = range(20, 9, -2) + arr = reduce(x, [], def(acc, e) = acc += e) + assertEquals([20, 18, 16, 14, 12, 10], arr) +} + def testRangeLength() { assertEquals(10, length(range(0, 10, 1))) assertEquals(5, length(range(0, 10, 2)))