Remove "Iterator.iterator()" intrinsic, add stdlib function

This commit is contained in:
Alexander Udalov
2014-02-21 21:20:35 +04:00
parent 4a5823c5bb
commit 11cc7f46f4
11 changed files with 29 additions and 99 deletions
+5
View File
@@ -4,6 +4,11 @@ import kotlin.support.*
import java.util.Collections
import kotlin.test.assertTrue
/**
* Returns the given iterator itself. This allows to use an instance of iterator in a ranged for-loop
*/
public fun <T> Iterator<T>.iterator(): Iterator<T> = this
/**
* Returns an iterator which invokes the function to calculate the next value on each iteration until the function returns *null*
*/
@@ -3,6 +3,7 @@ package iterators
import kotlin.test.assertEquals
import org.junit.Test as test
import kotlin.test.fails
import java.util.ArrayList
fun fibonacci(): Iterator<Int> {
// fibonacci terms
@@ -87,4 +88,25 @@ class IteratorsTest {
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))
}
test fun iterationOverIterator() {
val c = arrayList(0, 1, 2, 3, 4, 5)
var s = ""
for (i in c.iterator()) {
s = s + i.toString()
}
assertEquals("012345", s)
}
private fun <T, C : MutableCollection<in T>> Iterator<T>.takeWhileTo(result: C, predicate: (T) -> Boolean): C {
for (element in this) if (predicate(element)) result.add(element) else break
return result
}
test fun iterableExtension() {
val c = arrayList(0, 1, 2, 3, 4, 5)
val d = ArrayList<Int>()
c.iterator().takeWhileTo(d, {i -> i < 4 })
assertEquals(4, d.size())
}
}