tests for obsolete/fixed issues

#KT-1038 fixed
 #KT-1127 fixed
 #KT-1145 fixed
 #KT-1410 fixed
 #KT-1718 fixed
 #KT-2286 fixed
 #KT-1431 fixed
 #KT-2394 fixed
This commit is contained in:
Svetlana Isakova
2012-08-16 18:02:21 +04:00
parent fc858aec59
commit d2e33c8900
11 changed files with 245 additions and 9 deletions
@@ -0,0 +1,64 @@
//KT-1038 Cannot compile lazy iterators
class YieldingIterator<T>(val yieldingFunction : ()->T?) : Iterator<T>
{
var current : T? = yieldingFunction()
override fun next(): T {
val next = current;
if (next != null)
{
current = yieldingFunction()
return next
}
else throw IndexOutOfBoundsException()
}
override fun hasNext(): Boolean = current != null
}
class YieldingIterable<T>(val yielderFactory : ()->(()->T?)) : Iterable<T>
{
override fun iterator(): Iterator<T> = YieldingIterator(yielderFactory())
}
public fun<TItem> Iterable<TItem>.lazy() : Iterable<TItem>
{
return YieldingIterable {
val iterator = this.iterator();
{ if (iterator.hasNext()) iterator.next() else null }
}
}
fun<TItem> Iterable<TItem>.where(predicate : (TItem)->Boolean) : Iterable<TItem>
{
return YieldingIterable {
val iterator = this.iterator()
fun yielder() : TItem? {
while(iterator.hasNext())
{
val next = iterator.next()
if (predicate(next))
return next
}
null
}
{ yielder() }
}
}
fun<TItem, TResult> Iterable<TItem>.select(selector : (TItem)->TResult) : Iterable<TResult>
{
return YieldingIterable {
val iterator = this.iterator();
{ if(iterator.hasNext()) selector(iterator.next()) else null }
}
}
fun box() : String {
val x = 0..100
val filtered = x where { it % 2 == 0 }
val xx = x select { it * 2 }
var res = 0
for (val x in xx)
res += x
return if (res == 10100) "OK" else "fail"
}