diff options
author | Rex Kerr <ichoran@gmail.com> | 2014-11-21 17:20:41 -0800 |
---|---|---|
committer | Rex Kerr <ichoran@gmail.com> | 2014-11-21 17:20:41 -0800 |
commit | 7cf0370ef9e68b60f594143447b753945a8a8780 (patch) | |
tree | 3c46fbe66b663ad94a88cef80ef05f69d0490cd3 /test/junit | |
parent | c4df20d29a8d15ef23cf0d10fad56da0791bbbf6 (diff) | |
download | scala-7cf0370ef9e68b60f594143447b753945a8a8780.tar.gz scala-7cf0370ef9e68b60f594143447b753945a8a8780.tar.bz2 scala-7cf0370ef9e68b60f594143447b753945a8a8780.zip |
SI-6519 PagedSeq is not lazy enough
This was actually an issue with `length` of all things--it wasn't stopping scanning when it was past the end of what was requested. It'd just gratuitously read everything.
Also fixed an overflow bug with isDefinedAt along the way (start + index > Int.MaxValue would always return true despite never working).
Diffstat (limited to 'test/junit')
-rw-r--r-- | test/junit/scala/collection/immutable/PagedSeqTest.scala | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/test/junit/scala/collection/immutable/PagedSeqTest.scala b/test/junit/scala/collection/immutable/PagedSeqTest.scala index 5f83cf6f31..2b576a3655 100644 --- a/test/junit/scala/collection/immutable/PagedSeqTest.scala +++ b/test/junit/scala/collection/immutable/PagedSeqTest.scala @@ -5,12 +5,24 @@ import org.junit.runners.JUnit4 import org.junit.Test import org.junit.Assert._ -/* Test for SI-6615 */ @RunWith(classOf[JUnit4]) class PagedSeqTest { + // should not NPE, and should equal the given Seq @Test - def rovingDoesNotNPE(): Unit = { - // should not NPE, and should equal the given Seq + def test_SI6615(): Unit = { assertEquals(Seq('a'), PagedSeq.fromStrings(List.fill(5000)("a")).slice(4096, 4097)) } + + // Slices shouldn't read outside where they belong + @Test + def test_SI6519 { + var readAttempt = 0 + val sideEffectingIterator = new Iterator[Int] { + def hasNext = readAttempt < 65536 + def next = { readAttempt += 1; readAttempt } + } + val s = PagedSeq.fromIterator(sideEffectingIterator).slice(0,2).mkString + assertEquals(s, "12") + assert(readAttempt <= 4096) + } } |