Skip to content

Commit

Permalink
Merge pull request #5167 from martijnhoekstra/SI-9766
Browse files Browse the repository at this point in the history
SI 9766 - allow ++ on empty ConcatIterator
  • Loading branch information
lrytz committed May 23, 2016
2 parents 4196569 + c89c365 commit f640fa0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/library/scala/collection/Iterator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,8 @@ object Iterator {
} else Iterator.empty.next()

override def ++[B >: A](that: => GenTraversableOnce[B]): Iterator[B] =
new ConcatIterator(current, queue :+ (() => that.toIterator))
if(current eq null) new JoinIterator(Iterator.empty, that)
else new ConcatIterator(current, queue :+ (() => that.toIterator))
}

private[scala] final class JoinIterator[+A](lhs: Iterator[A], that: => GenTraversableOnce[A]) extends Iterator[A] {
Expand Down
18 changes: 18 additions & 0 deletions test/junit/scala/collection/IteratorTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -192,4 +192,22 @@ class IteratorTest {
assertSameElements(exp, res)
assertEquals(8, counter) // was 14
}

// SI-9766
@Test def exhaustedConcatIteratorConcat: Unit = {
def consume[A](i: Iterator[A]) = {
while(i.hasNext) i.next()
}
val joiniter = Iterator.empty ++ Seq(1, 2, 3)
assertTrue(joiniter.hasNext)
consume(joiniter)
val concatiter = joiniter ++ Seq(4, 5, 6)
assertTrue(concatiter.hasNext)
consume(concatiter)
assertFalse(concatiter.hasNext)
val concatFromEmpty = concatiter ++ Seq(7, 8, 9)
assertTrue(concatFromEmpty.hasNext)
consume(concatFromEmpty)
assertFalse(concatFromEmpty.hasNext)
}
}

0 comments on commit f640fa0

Please sign in to comment.