Исправлен итератор в std::range для реверсивных промежутков. Fix #3

This commit is contained in:
Victor 2019-09-24 23:08:57 +03:00
parent 7711170601
commit 00db00c2aa
2 changed files with 14 additions and 2 deletions

View File

@ -134,7 +134,7 @@ public final class std_range implements Function {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return value < toInt; return (stepInt > 0) ? (value < toInt) : (value > toInt);
} }
@Override @Override
@ -154,7 +154,7 @@ public final class std_range implements Function {
@Override @Override
public boolean hasNext() { public boolean hasNext() {
return value < to; return (step > 0) ? (value < to) : (value > to);
} }
@Override @Override

View File

@ -28,6 +28,18 @@ def testRangeParamsReversed() {
assertEquals(5, x[5]) 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() { def testRangeLength() {
assertEquals(10, length(range(0, 10, 1))) assertEquals(10, length(range(0, 10, 1)))
assertEquals(5, length(range(0, 10, 2))) assertEquals(5, length(range(0, 10, 2)))