Skip to content

Commit 00db00c

Browse files
committed
Исправлен итератор в std::range для реверсивных промежутков. Fix #3
1 parent 7711170 commit 00db00c

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/main/java/com/annimon/ownlang/modules/std/std_range.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public Iterator<Value> iterator() {
134134

135135
@Override
136136
public boolean hasNext() {
137-
return value < toInt;
137+
return (stepInt > 0) ? (value < toInt) : (value > toInt);
138138
}
139139

140140
@Override
@@ -154,7 +154,7 @@ public void remove() { }
154154

155155
@Override
156156
public boolean hasNext() {
157-
return value < to;
157+
return (step > 0) ? (value < to) : (value > to);
158158
}
159159

160160
@Override

src/test/resources/modules/std/range.own

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ def testRangeParamsReversed() {
2828
assertEquals(5, x[5])
2929
}
3030

31+
def testRangeIterator() {
32+
x = range(0, 9, 2)
33+
arr = reduce(x, [], def(acc, e) = acc += e)
34+
assertEquals([0, 2, 4, 6, 8], arr)
35+
}
36+
37+
def testRangeReversedIterator() {
38+
x = range(20, 9, -2)
39+
arr = reduce(x, [], def(acc, e) = acc += e)
40+
assertEquals([20, 18, 16, 14, 12, 10], arr)
41+
}
42+
3143
def testRangeLength() {
3244
assertEquals(10, length(range(0, 10, 1)))
3345
assertEquals(5, length(range(0, 10, 2)))

0 commit comments

Comments
 (0)