diff options
author | Rory Graves <rory.graves@fieldmark.co.uk> | 2017-03-04 07:52:04 +0100 |
---|---|---|
committer | Rory Graves <rory.graves@fieldmark.co.uk> | 2017-03-04 08:06:25 +0100 |
commit | aefc8f4936e35b4f835fa2ec70d56443bbd7fa06 (patch) | |
tree | bca85d4a0ec839f7be8ac7b8abcf8ec08b84d38d /test/benchmarks/src | |
parent | fad8b95335f615ae0b6c4bb79f21304ff70d061e (diff) | |
download | scala-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/benchmarks/src')
-rw-r--r-- | test/benchmarks/src/main/scala/scala/collection/immutable/MapBenchmark.scala | 29 | ||||
-rw-r--r-- | test/benchmarks/src/main/scala/scala/collection/immutable/SetBenchmark.scala | 29 |
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") + } +} |