summaryrefslogtreecommitdiff
path: root/test/files/run/t2526.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-11-21 17:24:29 +0000
committerPaul Phillips <paulp@improving.org>2009-11-21 17:24:29 +0000
commit2ea21b6ca0a68ef9015668579d6e0eee1e9ae4be (patch)
treea973e0ad1afff34f4e4003c381e28f437a71b418 /test/files/run/t2526.scala
parentb408d0e98f694add637fc867433c627ca3191062 (diff)
downloadscala-2ea21b6ca0a68ef9015668579d6e0eee1e9ae4be.tar.gz
scala-2ea21b6ca0a68ef9015668579d6e0eee1e9ae4be.tar.bz2
scala-2ea21b6ca0a68ef9015668579d6e0eee1e9ae4be.zip
Applied performance patch and test case from ij...
Applied performance patch and test case from ijuma; closes #2526.
Diffstat (limited to 'test/files/run/t2526.scala')
-rw-r--r--test/files/run/t2526.scala54
1 files changed, 54 insertions, 0 deletions
diff --git a/test/files/run/t2526.scala b/test/files/run/t2526.scala
new file mode 100644
index 0000000000..5f6d60546a
--- /dev/null
+++ b/test/files/run/t2526.scala
@@ -0,0 +1,54 @@
+/**
+ * Checks that various foreach methods overridden in mutable.HashMap as part of ticket #2526
+ * still work correctly.
+ */
+object Test {
+ import collection._
+
+ def main(args: Array[String]) {
+ val m = new mutable.HashMap[String, String]
+
+ /* Use non hash-based structure for verification */
+ val keys = List("a", "b", "c", "d", "e")
+ val valueSuffix = "value"
+ val values = keys.map(_ + valueSuffix)
+ val entries = keys.zip(values)
+
+ for (k <- keys) m(k) = k + valueSuffix
+
+ assertForeach(keys, m.keySet.iterator)
+ assertForeach(keys, m.keysIterator)
+ assertForeach(keys, m.keySet)
+
+ assertForeach(values, m.valuesIterable.iterator)
+ assertForeach(values, m.valuesIterator)
+ assertForeach(values, m.valuesIterable)
+
+ assertForeach(entries, m)
+ }
+
+ /* Checks foreach of `actual` goes over all the elements in `expected` */
+ private def assertForeach[E](expected: Traversable[E], actual: Iterator[E]): Unit = {
+ val notYetFound = new mutable.ArrayBuffer[E]() ++= expected
+ actual.foreach { e =>
+ assert(notYetFound.contains(e))
+ notYetFound -= e
+ }
+ assert(notYetFound.size == 0, "mutable.HashMap.foreach should have iterated over: " + notYetFound)
+ }
+
+ /*
+ * Checks foreach of `actual` goes over all the elements in `expected`
+ * We duplicate the method above because there is no common inteface between Traverable and
+ * Iterator and we want to avoid converting between collections to ensure that we test what
+ * we mean to test.
+ */
+ private def assertForeach[E](expected: Traversable[E], actual: Traversable[E]): Unit = {
+ val notYetFound = new mutable.ArrayBuffer[E]() ++= expected
+ actual.foreach { e =>
+ assert(notYetFound.contains(e))
+ notYetFound -= e
+ }
+ assert(notYetFound.size == 0, "mutable.HashMap.foreach should have iterated over: " + notYetFound)
+ }
+}