Skip to content

Instantly share code, notes, and snippets.

@DennisVDB
Created January 17, 2019 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DennisVDB/6cba4de4a04480433b927a4c34bbb9ff to your computer and use it in GitHub Desktop.
Save DennisVDB/6cba4de4a04480433b927a4c34bbb9ff to your computer and use it in GitHub Desktop.
package benchmarks
import java.util.concurrent.TimeUnit
import org.openjdk.jmh.annotations._
@BenchmarkMode(Array(Mode.AverageTime))
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Thread)
class FusionBench {
var list1: List[Int] = _
var list2: List[Int] = _
var str1: Stream[Int] = _
var seq1: Seq[Int] = _
var arr1: Array[Int] = _
var iterable1: Iterable[Int] = _
var iterator1: Iterator[Int] = _
@Setup
def setup: Unit = {
list1 = List.range(10000, 1, -1)
list2 = List.range(10000, 1, -1)
str1 = Stream.range(10000, 1, -1)
seq1 = Seq.range(10000, 1, -1)
arr1 = Array.range(10000, 1, -1)
iterable1 = Iterable.range(10000, 1, -1)
iterator1 = Iterator.range(10000, 1, -1)
}
@Benchmark
def listFusion: List[Int] = list1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2)
@Benchmark
def listViaIteratorFusion: List[Int] = list2.toIterator.map(_ + 1).filter(_ % 2 == 0).map(_ * 2).toList
@Benchmark
def streamFusion: Stream[Int] = str1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2).force
@Benchmark
def seqFusion: Seq[Int] = seq1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2)
@Benchmark
def arrFusion: Seq[Int] = arr1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2)
@Benchmark
def iterableFusion: Iterable[Int] = iterable1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2)
@Benchmark
def iteratorFusion: Iterator[Int] = iterator1.map(_ + 1).filter(_ % 2 == 0).map(_ * 2)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment