From ade69ec0e93cb1182d734624deaf2cf744831c55 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 10 Apr 2015 21:00:21 +0300 Subject: [PATCH] Provide the emptySequence() method. sequenceOf() with no arguments is equivalent to emptySequence(). #KT-7233 Fixed --- .../stdlib/src/kotlin/collections/Sequence.kt | 16 +++++++++++++++- .../stdlib/test/collections/SequenceTest.kt | 13 +++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/libraries/stdlib/src/kotlin/collections/Sequence.kt b/libraries/stdlib/src/kotlin/collections/Sequence.kt index a2d51fe4197..581564795c2 100644 --- a/libraries/stdlib/src/kotlin/collections/Sequence.kt +++ b/libraries/stdlib/src/kotlin/collections/Sequence.kt @@ -53,7 +53,7 @@ public fun Enumeration.asSequence(): Sequence = this.iterator().sequenc /** * Creates a sequence that returns the specified values. */ -public fun sequenceOf(vararg elements: T): Sequence = elements.asSequence() +public fun sequenceOf(vararg elements: T): Sequence = if (elements.isEmpty()) emptySequence() else elements.asSequence() /** * Creates a sequence that returns all values in the specified [progression]. @@ -62,6 +62,20 @@ public fun sequenceOf(progression: Progression): Sequence = object : S override fun iterator(): Iterator = progression.iterator() } +/** + * Returns an empty sequence. + */ +public fun emptySequence(): Sequence = EmptySequence + +private object EmptySequence : Sequence { + override fun iterator(): Iterator = EmptySequenceIterator +} + +private object EmptySequenceIterator : Iterator { + override fun next(): Nothing = throw NoSuchElementException("Sequence is empty.") + override fun hasNext(): Boolean = false +} + deprecated("Use FilteringSequence instead") public class FilteringStream(stream: Stream, sendWhen: Boolean = true, predicate: (T) -> Boolean) : Stream by FilteringSequence(stream.toSequence(), sendWhen, predicate) diff --git a/libraries/stdlib/test/collections/SequenceTest.kt b/libraries/stdlib/test/collections/SequenceTest.kt index eebcdfd8e4d..1b09f563d0c 100644 --- a/libraries/stdlib/test/collections/SequenceTest.kt +++ b/libraries/stdlib/test/collections/SequenceTest.kt @@ -20,15 +20,16 @@ fun fibonacci(): Sequence { public class SequenceTest { test fun filterEmptySequence() { - val sequence = sequenceOf() - assertEquals(0, sequence.filter { false }.count()) - assertEquals(0, sequence.filter { true }.count()) + for (sequence in listOf(emptySequence(), sequenceOf())) { + assertEquals(0, sequence.filter { false }.count()) + assertEquals(0, sequence.filter { true }.count()) + } } test fun mapEmptySequence() { - val sequence = sequenceOf() - assertEquals(0, sequence.map { false }.count()) - assertEquals(0, sequence.map { true }.count()) + for (sequence in listOf(emptySequence(), sequenceOf())) { + assertEquals(0, sequence.map { true }.count()) + } } test fun requireNoNulls() {