diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-05-23 16:36:23 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-05-23 16:36:23 +0200 |
commit | f640fa0a6d01270b4c16238073c154bf0e71b559 (patch) | |
tree | 7bc58ad05effbdfa7653fea52cf12e8780fb6d7e | |
parent | 41965695b71bc00ea60003c39c72a0e10bfd621f (diff) | |
parent | c89c36597f922fe29cbb3cec8095611f86ba4976 (diff) | |
download | scala-f640fa0a6d01270b4c16238073c154bf0e71b559.tar.gz scala-f640fa0a6d01270b4c16238073c154bf0e71b559.tar.bz2 scala-f640fa0a6d01270b4c16238073c154bf0e71b559.zip |
Merge pull request #5167 from martijnhoekstra/SI-9766
SI 9766 - allow ++ on empty ConcatIterator
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 3 | ||||
-rw-r--r-- | test/junit/scala/collection/IteratorTest.scala | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index 8d88b1c6b1..9ba16976bd 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -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] { diff --git a/test/junit/scala/collection/IteratorTest.scala b/test/junit/scala/collection/IteratorTest.scala index 329c85127a..d980cadeb3 100644 --- a/test/junit/scala/collection/IteratorTest.scala +++ b/test/junit/scala/collection/IteratorTest.scala @@ -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) + } } |