summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRory Graves <rory.graves@fieldmark.co.uk>2017-03-04 07:52:04 +0100
committerRory Graves <rory.graves@fieldmark.co.uk>2017-03-04 08:06:25 +0100
commitaefc8f4936e35b4f835fa2ec70d56443bbd7fa06 (patch)
treebca85d4a0ec839f7be8ac7b8abcf8ec08b84d38d /test
parentfad8b95335f615ae0b6c4bb79f21304ff70d061e (diff)
downloadscala-aefc8f4936e35b4f835fa2ec70d56443bbd7fa06.tar.gz
scala-aefc8f4936e35b4f835fa2ec70d56443bbd7fa06.tar.bz2
scala-aefc8f4936e35b4f835fa2ec70d56443bbd7fa06.zip
Add benchmarks for Map4 to HashMap and Set4 to HashSet transitions
Diffstat (limited to 'test')
-rw-r--r--test/benchmarks/src/main/scala/scala/collection/immutable/MapBenchmark.scala29
-rw-r--r--test/benchmarks/src/main/scala/scala/collection/immutable/SetBenchmark.scala29
2 files changed, 58 insertions, 0 deletions
diff --git a/test/benchmarks/src/main/scala/scala/collection/immutable/MapBenchmark.scala b/test/benchmarks/src/main/scala/scala/collection/immutable/MapBenchmark.scala
new file mode 100644
index 0000000000..a0358d6a1a
--- /dev/null
+++ b/test/benchmarks/src/main/scala/scala/collection/immutable/MapBenchmark.scala
@@ -0,0 +1,29 @@
+package scala.collection.immutable
+
+import java.util.concurrent.TimeUnit
+
+import org.openjdk.jmh.annotations._
+import org.openjdk.jmh.infra._
+
+@BenchmarkMode(Array(Mode.AverageTime))
+@Fork(2)
+@Threads(1)
+@Warmup(iterations = 10)
+@Measurement(iterations = 10)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@State(Scope.Benchmark)
+class MapBenchmark {
+
+ var base: Map[String,String] = _
+
+
+ @Setup(Level.Trial) def initKeys(): Unit = {
+ base = Map("a" -> "a", "b" -> "b", "c" -> "c", "d" -> "d")
+ }
+
+ // immutable map is implemented as EmptyMap -> Map1 -> Map2 -> Map3 -> Map4 -> Hashmap
+ // add an extra entry to Map4 causes a lot of work, benchmark the transition
+ @Benchmark def map4AddElement(bh: Blackhole): Unit = {
+ bh.consume(base.updated("e", "e"))
+ }
+}
diff --git a/test/benchmarks/src/main/scala/scala/collection/immutable/SetBenchmark.scala b/test/benchmarks/src/main/scala/scala/collection/immutable/SetBenchmark.scala
new file mode 100644
index 0000000000..9330626691
--- /dev/null
+++ b/test/benchmarks/src/main/scala/scala/collection/immutable/SetBenchmark.scala
@@ -0,0 +1,29 @@
+package scala.collection.immutable
+
+import java.util.concurrent.TimeUnit
+
+import org.openjdk.jmh.annotations._
+import org.openjdk.jmh.infra._
+
+@BenchmarkMode(Array(Mode.AverageTime))
+@Fork(2)
+@Threads(1)
+@Warmup(iterations = 10)
+@Measurement(iterations = 10)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@State(Scope.Benchmark)
+class SetBenchmark {
+
+ var base: Set[String] = _
+
+
+ @Setup(Level.Trial) def initKeys(): Unit = {
+ base = Set("a", "b", "c", "d")
+ }
+
+ // immutable map is implemented as EmptySet -> Set1 -> Set2 -> Set3 -> Set4 -> HashSet
+ // add an extra entry to Set4 causes a lot of work, benchmark the transition
+ @Benchmark def set4AddElement(bh: Blackhole): Unit = {
+ bh.consume(base + "e")
+ }
+}