diff options
author | Paul Phillips <paulp@improving.org> | 2009-11-21 17:24:29 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-11-21 17:24:29 +0000 |
commit | 2ea21b6ca0a68ef9015668579d6e0eee1e9ae4be (patch) | |
tree | a973e0ad1afff34f4e4003c381e28f437a71b418 /test | |
parent | b408d0e98f694add637fc867433c627ca3191062 (diff) | |
download | scala-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')
-rw-r--r-- | test/files/run/t2526.scala | 54 |
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) + } +} |