summaryrefslogtreecommitdiff
path: root/test/junit/scala/collection/SetMapConsistencyTest.scala
diff options
context:
space:
mode:
authorRex Kerr <ichoran@gmail.com>2014-01-15 20:16:39 -0800
committerRex Kerr <ichoran@gmail.com>2014-02-09 08:20:30 -0800
commit2dfbbf55688d17fd3daa15341da878b98783ba3c (patch)
treecf56982aaf726c3ee66b6edebd8c213ebc234b78 /test/junit/scala/collection/SetMapConsistencyTest.scala
parent08e51dfec50842253afb87cc5ae3c7400dc18ced (diff)
downloadscala-2dfbbf55688d17fd3daa15341da878b98783ba3c.tar.gz
scala-2dfbbf55688d17fd3daa15341da878b98783ba3c.tar.bz2
scala-2dfbbf55688d17fd3daa15341da878b98783ba3c.zip
SI-8154 AnyRefMap iterates its way to ((null, null))
Changed logic to prevent mutation between hasNext and next from delivering invalid results. Also fixed superscripts in scaladoc.
Diffstat (limited to 'test/junit/scala/collection/SetMapConsistencyTest.scala')
-rw-r--r--test/junit/scala/collection/SetMapConsistencyTest.scala21
1 files changed, 20 insertions, 1 deletions
diff --git a/test/junit/scala/collection/SetMapConsistencyTest.scala b/test/junit/scala/collection/SetMapConsistencyTest.scala
index 7bb8ca958b..0d6f43db06 100644
--- a/test/junit/scala/collection/SetMapConsistencyTest.scala
+++ b/test/junit/scala/collection/SetMapConsistencyTest.scala
@@ -478,7 +478,7 @@ class SetMapConsistencyTest {
}
@Test
- def si8213() {
+ def testSI8213() {
val am = new scala.collection.mutable.AnyRefMap[String, Int]
for (i <- 0 until 1024) am += i.toString -> i
am.getOrElseUpdate("1024", { am.clear; -1 })
@@ -488,4 +488,23 @@ class SetMapConsistencyTest {
lm.getOrElseUpdate(1024, { lm.clear; -1 })
assert(lm == scala.collection.mutable.LongMap(1024L -> -1))
}
+
+ // Mutating when an iterator is in the wild shouldn't produce random junk in the iterator
+ // Todo: test all sets/maps this way
+ @Test
+ def testSI8154() {
+ def f() = {
+ val xs = scala.collection.mutable.AnyRefMap[String, Int]("a" -> 1)
+ val it = xs.iterator
+ it.hasNext
+ xs.clear()
+
+ if (it.hasNext) Some(it.next)
+ else None
+ }
+ assert(f() match {
+ case Some((a,b)) if (a==null || b==null) => false
+ case _ => true
+ })
+ }
}