diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2017-02-08 10:09:06 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-08 10:09:06 -0800 |
commit | 214a158f67405f420f144f1e83a3df51fcb97866 (patch) | |
tree | 6e42da281cf324166de9f1a307314e335c444376 /test/benchmarks/src | |
parent | 6644017dad3f35669d9e2353335a54b7b5489fb6 (diff) | |
parent | f24c2603d0acee5bcb6d5d80bf1e1a4645fa74f0 (diff) | |
download | scala-214a158f67405f420f144f1e83a3df51fcb97866.tar.gz scala-214a158f67405f420f144f1e83a3df51fcb97866.tar.bz2 scala-214a158f67405f420f144f1e83a3df51fcb97866.zip |
Merge pull request #5664 from adriaanm/rework-coll-perf
Optimise common operations on Array and List
Diffstat (limited to 'test/benchmarks/src')
-rw-r--r-- | test/benchmarks/src/main/scala/scala/collection/immutable/ListBenchmark.scala | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/benchmarks/src/main/scala/scala/collection/immutable/ListBenchmark.scala b/test/benchmarks/src/main/scala/scala/collection/immutable/ListBenchmark.scala new file mode 100644 index 0000000000..94844dcae2 --- /dev/null +++ b/test/benchmarks/src/main/scala/scala/collection/immutable/ListBenchmark.scala @@ -0,0 +1,72 @@ +package scala.collection.immutable + +import java.util.concurrent.TimeUnit + +import org.openjdk.jmh.annotations._ + +object ListBenchmark { + case class Content(value: Int) +} + +@BenchmarkMode(Array(Mode.AverageTime)) +@Fork(2) +@Threads(1) +@Warmup(iterations = 10) +@Measurement(iterations = 10) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Benchmark) +class ListBenchmark { + import ListBenchmark._ + @Param(Array("0", "1", "10", "100", "1000")) + var size: Int = _ + + var values: List[Content] = _ + var mid: Content = _ + var last: Content = _ + + + @Setup(Level.Trial) def initKeys(): Unit = { + values = List.tabulate(size)(v => Content(v)) + mid = Content(size / 2) + last = Content(Math.max(0,size -1)) + } + + @Benchmark def filter_includeAll: Any = { + values.filter(v => true) + } + + @Benchmark def filter_excludeAll: Any = { + values.filter(_ => false) + } + + @Benchmark def filter_exc_mid: Any = { + values.filter(v => v.value != mid.value) + } + + @Benchmark def filter_from_mid: Any = { + values.filter(v => v.value <= mid.value) + } + + @Benchmark def filter_exc_last: Any = { + values.filter(v => v.value != last.value) + } + + @Benchmark def filter_only_last: Any = { + values.filter(v => v.value == last.value) + } + + @Setup(Level.Trial) def initKeys(): Unit = { + values = List.tabulate(size)(n => if (n == size / 2) "mid" else "") + } + + @Benchmark def mapConserve_identity: Any = { + values.mapConserve(x => x) + } + + @Benchmark def mapConserve_modifyAll: Any = { + values.mapConserve(x => "replace") + } + @Benchmark def mapConserve_modifyMid: Any = { + values.mapConserve(x => if (x == "mid") "replace" else x) + } +} |