diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2017-02-07 17:29:45 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-07 17:29:45 -0800 |
commit | 8038924acb9326ee8378b8dd916e2d74e388878d (patch) | |
tree | fd5eb585fa7de31e6574943ce26a6fda0da343d1 /test | |
parent | 5f944cca7e43f5c9f52e2294781f56634feba2d8 (diff) | |
parent | 43e9c9053538230a2af41657c7108232d9be0216 (diff) | |
download | scala-8038924acb9326ee8378b8dd916e2d74e388878d.tar.gz scala-8038924acb9326ee8378b8dd916e2d74e388878d.tar.bz2 scala-8038924acb9326ee8378b8dd916e2d74e388878d.zip |
Merge pull request #5673 from retronym/topic/hashmap-contains
Optimizations in immutable.Map.{get, contains}
Diffstat (limited to 'test')
-rw-r--r-- | test/benchmarks/src/main/scala/scala/collection/immutable/HashMapBenchmark.scala | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/benchmarks/src/main/scala/scala/collection/immutable/HashMapBenchmark.scala b/test/benchmarks/src/main/scala/scala/collection/immutable/HashMapBenchmark.scala new file mode 100644 index 0000000000..134cd6879b --- /dev/null +++ b/test/benchmarks/src/main/scala/scala/collection/immutable/HashMapBenchmark.scala @@ -0,0 +1,56 @@ +package scala.collection.immutable + +import org.openjdk.jmh.annotations._ +import org.openjdk.jmh.infra._ +import org.openjdk.jmh.runner.IterationType +import benchmark._ +import java.util.concurrent.TimeUnit + +@BenchmarkMode(Array(Mode.AverageTime)) +@Fork(2) +@Threads(1) +@Warmup(iterations = 10) +@Measurement(iterations = 10) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Benchmark) +class HashMapBenchmark { + @Param(Array("10", "100", "1000")) + var size: Int = _ + + var existingKeys: Array[Any] = _ + var missingKeys: Array[Any] = _ + + @Setup(Level.Trial) def initKeys(): Unit = { + existingKeys = (0 to size).map(i => (i % 4) match { + case 0 => i.toString + case 1 => i.toChar + case 2 => i.toDouble + case 3 => i.toInt + }).toArray + missingKeys = (size to 2 * size).toArray + } + + var map: collection.immutable.HashMap[Any, Any] = null + + @Setup(Level.Trial) def initialize = { + map = collection.immutable.HashMap(existingKeys.map(x => (x, x)) : _*) + } + + @Benchmark def contains(bh: Blackhole): Unit = { + var i = 0; + while (i < size) { + bh.consume(map.contains(existingKeys(i))) + bh.consume(map.contains(missingKeys(i))) + i += 1 + } + } + + @Benchmark def get(bh: Blackhole): Unit = { + var i = 0; + while (i < size) { + bh.consume(map.get(existingKeys(i))) + bh.consume(map.get(missingKeys(i))) + i += 1 + } + } +} |