Stdlib: Add iteration over unary function, implement iterator zip and skip

This commit is contained in:
Alexey Sedunov
2013-11-18 13:58:35 +04:00
parent 3fadff21cb
commit 9839c2b0b6
3 changed files with 80 additions and 0 deletions
@@ -18,4 +18,9 @@ class FunctionIteratorTest {
val list = iter.toList()
assertEquals(arrayList(2, 1, 0), list)
}
Test fun iterateOverFunction2() {
val values = iterate<Int>(3) { n -> if (n > 0) n - 1 else null }
assertEquals(arrayList(3, 2, 1, 0), values.toList())
}
}
@@ -77,4 +77,14 @@ class IteratorsTest {
assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().filter { it > 10 }.makeString(limit = 10))
assertEquals("144, 233, 377, 610, 987", fibonacci().filter { it > 100 }.takeWhile { it < 1000 }.makeString())
}
test fun pairIterator() {
val pairStr = (fibonacci() zip fibonacci().map { i -> i*2 }).makeString(limit = 10)
assertEquals("(0, 0), (1, 2), (1, 2), (2, 4), (3, 6), (5, 10), (8, 16), (13, 26), (21, 42), (34, 68), ...", pairStr)
}
test fun skippingIterator() {
assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().skip(7).makeString(limit = 10))
assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().skip(3).skip(4).makeString(limit = 10))
}
}