summaryrefslogtreecommitdiff
path: root/test/files/run/t5293-map.scala
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-02-15 20:50:25 +0100
committerAleksandar Prokopec <axel22@gmail.com>2012-02-15 20:50:25 +0100
commitf0f5ad3c81431eba27d590f80872306f60d01505 (patch)
tree4288db5cb7331878cdfb3a956a047de9c6ed1fcd /test/files/run/t5293-map.scala
parent14f3135368b923a1f5d14d1b4f7424db22fd7f79 (diff)
downloadscala-f0f5ad3c81431eba27d590f80872306f60d01505.tar.gz
scala-f0f5ad3c81431eba27d590f80872306f60d01505.tar.bz2
scala-f0f5ad3c81431eba27d590f80872306f60d01505.zip
Apply the fix for si-5293 to hash maps.
This fix was previously only applied to hash sets.
Diffstat (limited to 'test/files/run/t5293-map.scala')
-rw-r--r--test/files/run/t5293-map.scala88
1 files changed, 88 insertions, 0 deletions
diff --git a/test/files/run/t5293-map.scala b/test/files/run/t5293-map.scala
new file mode 100644
index 0000000000..9e186894fc
--- /dev/null
+++ b/test/files/run/t5293-map.scala
@@ -0,0 +1,88 @@
+
+
+
+import scala.collection.JavaConverters._
+
+
+
+object Test extends App {
+
+ def bench(label: String)(body: => Unit): Long = {
+ val start = System.nanoTime
+
+ 0.until(10).foreach(_ => body)
+
+ val end = System.nanoTime
+
+ //println("%s: %s ms".format(label, (end - start) / 1000.0 / 1000.0))
+
+ end - start
+ }
+
+ def benchJava(values: java.util.Map[Int, Int]) = {
+ bench("Java Map") {
+ val m = new java.util.HashMap[Int, Int]
+
+ m.putAll(values)
+ }
+ }
+
+ def benchScala(values: Iterable[(Int, Int)]) = {
+ bench("Scala Map") {
+ val m = new scala.collection.mutable.HashMap[Int, Int]
+
+ m ++= values
+ }
+ }
+
+ def benchScalaSorted(values: Iterable[(Int, Int)]) = {
+ bench("Scala Map sorted") {
+ val m = new scala.collection.mutable.HashMap[Int, Int]
+
+ m ++= values.toArray.sorted
+ }
+ }
+
+ def benchScalaPar(values: Iterable[(Int, Int)]) = {
+ bench("Scala ParMap") {
+ val m = new scala.collection.parallel.mutable.ParHashMap[Int, Int] map { x => x }
+
+ m ++= values
+ }
+ }
+
+ val total = 50000
+ val values = (0 until total) zip (0 until total)
+ val map = scala.collection.mutable.HashMap.empty[Int, Int]
+
+ map ++= values
+
+ // warmup
+ for (x <- 0 until 5) {
+ benchJava(map.asJava)
+ benchScala(map)
+ benchScalaPar(map)
+ benchJava(map.asJava)
+ benchScala(map)
+ benchScalaPar(map)
+ }
+
+ val javamap = benchJava(map.asJava)
+ val scalamap = benchScala(map)
+ val scalaparmap = benchScalaPar(map)
+
+ // println(javamap)
+ // println(scalamap)
+ // println(scalaparmap)
+
+ assert(scalamap < (javamap * 4))
+ assert(scalaparmap < (javamap * 4))
+}
+
+
+
+
+
+
+
+