Create at most one wrapper sequence for adjacent drop/take operations on sequences.

Based on PR #814 by Sargun Vohra
#KT-10821 Fixed
This commit is contained in:
Ilya Gorbunov
2016-02-12 20:37:16 +03:00
parent a663797cb8
commit 24edbc36df
4 changed files with 122 additions and 14 deletions
@@ -111,13 +111,39 @@ public class SequenceTest {
}
@test fun drop() {
assertEquals(emptyList(), emptySequence<Int>().drop(1).toList())
listOf(2, 3, 4, 5).let { assertEquals(it, it.asSequence().drop(0).toList()) }
assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().drop(7).joinToString(limit = 10))
assertEquals("13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...", fibonacci().drop(3).drop(4).joinToString(limit = 10))
assertTrue(assertFails { fibonacci().drop(-1) } is IllegalArgumentException)
}
@test fun take() {
assertEquals(emptyList(), emptySequence<Int>().take(1).toList())
assertEquals(emptyList(), fibonacci().take(0).toList())
assertEquals("0, 1, 1, 2, 3, 5, 8", fibonacci().take(7).joinToString())
assertEquals("2, 3, 5, 8", fibonacci().drop(3).take(4).joinToString())
assertEquals("0, 1, 1, 2", fibonacci().take(7).take(4).joinToString())
assertEquals("0, 1, 1, 2", fibonacci().take(4).take(5).joinToString())
assertEquals(emptyList(), fibonacci().take(1).drop(1).toList())
assertEquals(emptyList(), fibonacci().take(1).drop(2).toList())
assertTrue(assertFails { fibonacci().take(-1) } is IllegalArgumentException)
}
@test fun subSequence() {
assertEquals(listOf(2, 3, 5, 8), fibonacci().drop(3).take(4).toList())
assertEquals(listOf(2, 3, 5, 8), fibonacci().take(7).drop(3).toList())
val seq = fibonacci().drop(3).take(4)
assertEquals(listOf(2, 3, 5, 8), seq.take(5).toList())
assertEquals(listOf(2, 3, 5), seq.take(3).toList())
assertEquals(emptyList(), seq.drop(5).toList())
assertEquals(listOf(8), seq.drop(3).toList())
}
@test fun dropWhile() {