diff options
author | Seth Tisue <seth@tisue.net> | 2016-02-08 09:24:20 -0800 |
---|---|---|
committer | Seth Tisue <seth@tisue.net> | 2016-02-08 09:24:20 -0800 |
commit | ef4ed496c59e4b54266aaf20db917fb41bb9f1e4 (patch) | |
tree | 6e8fa51fc85bf3d0848faf3ede5fc82c6232e4b2 /test | |
parent | 42525ec8d072cdd79d3916c09baa063b34a71f25 (diff) | |
parent | ecee7b75328ae1f856b5fa832ebad7fc9e42f64a (diff) | |
download | scala-ef4ed496c59e4b54266aaf20db917fb41bb9f1e4.tar.gz scala-ef4ed496c59e4b54266aaf20db917fb41bb9f1e4.tar.bz2 scala-ef4ed496c59e4b54266aaf20db917fb41bb9f1e4.zip |
Merge pull request #4937 from szeiger/issue/9623-2.11
SI-9623 Avoid unnecessary hasNext calls in JoinIterator & ConcatIterator
Diffstat (limited to 'test')
-rw-r--r-- | test/junit/scala/collection/IteratorTest.scala | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/junit/scala/collection/IteratorTest.scala b/test/junit/scala/collection/IteratorTest.scala index 1c1e50aed9..329c85127a 100644 --- a/test/junit/scala/collection/IteratorTest.scala +++ b/test/junit/scala/collection/IteratorTest.scala @@ -164,4 +164,32 @@ class IteratorTest { assertEquals(1, y.next) assertFalse(x.hasNext) // was true, after advancing underlying iterator } + // SI-9623 + @Test def noExcessiveHasNextInJoinIterator: Unit = { + var counter = 0 + val exp = List(1,2,3,1,2,3) + def it: Iterator[Int] = new Iterator[Int] { + val parent = List(1,2,3).iterator + def next(): Int = parent.next + def hasNext: Boolean = { counter += 1; parent.hasNext } + } + // Iterate separately + val res = new mutable.ArrayBuffer[Int] + it.foreach(res += _) + it.foreach(res += _) + assertSameElements(exp, res) + assertEquals(8, counter) + // JoinIterator + counter = 0 + res.clear + (it ++ it).foreach(res += _) + assertSameElements(exp, res) + assertEquals(8, counter) // was 17 + // ConcatIterator + counter = 0 + res.clear + (Iterator.empty ++ it ++ it).foreach(res += _) + assertSameElements(exp, res) + assertEquals(8, counter) // was 14 + } } |