diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-09-05 21:59:08 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-09-05 21:59:08 -0700 |
commit | dc6b91822f695250938ee06ad21818b1ca8a778d (patch) | |
tree | cb1b234fb886fb1849d0d0093e404a694c8aa4fc | |
parent | 81a67eeacc7d2622ee364a21203b227142e2043e (diff) | |
download | scala-dc6b91822f695250938ee06ad21818b1ca8a778d.tar.gz scala-dc6b91822f695250938ee06ad21818b1ca8a778d.tar.bz2 scala-dc6b91822f695250938ee06ad21818b1ca8a778d.zip |
SI-9913 Lead span iterator finishes at state -1
Even if no elements fail the predicate (so that the trailing
iterator is empty).
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 2 | ||||
-rw-r--r-- | test/junit/scala/collection/IteratorTest.scala | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index 9ba16976bd..720339f054 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -688,12 +688,12 @@ trait Iterator[+A] extends TraversableOnce[A] { } else { if (status == 1) store(hd) + status = -1 while (self.hasNext) { val a = self.next() if (p(a)) store(a) else { hd = a - status = -1 return true } } diff --git a/test/junit/scala/collection/IteratorTest.scala b/test/junit/scala/collection/IteratorTest.scala index d980cadeb3..f18a4de4e9 100644 --- a/test/junit/scala/collection/IteratorTest.scala +++ b/test/junit/scala/collection/IteratorTest.scala @@ -164,6 +164,12 @@ class IteratorTest { assertEquals(1, y.next) assertFalse(x.hasNext) // was true, after advancing underlying iterator } + // SI-9913 + @Test def `span leading iterator finishes at state -1`(): Unit = { + val (yes, no) = Iterator(1, 2, 3).span(_ => true) + assertFalse(no.hasNext) + assertTrue(yes.hasNext) + } // SI-9623 @Test def noExcessiveHasNextInJoinIterator: Unit = { var counter = 0 |