Skip to content

Commit

Permalink
more benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
yanns committed Mar 20, 2019
1 parent 1d2c387 commit b5f38d5
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 57 deletions.
45 changes: 45 additions & 0 deletions benchmarks/src/main/scala/json/FromJsonBenchmark.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package json

import io.sphere.json._
import org.openjdk.jmh.annotations._

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
@Warmup(iterations = 10, time = 1)
@Measurement(iterations = 10, time = 1)
@Fork(value = 1)
class FromJsonBenchmark {

/* on local mac
jmh:run
Benchmark Mode Cnt Score Error Units
FromJsonBenchmark.listReader thrpt 10 66,286 ± 1,025 ops/s
FromJsonBenchmark.parseFromStringToCaseClass thrpt 10 12,974 ± 0,333 ops/s
FromJsonBenchmark.seqReader thrpt 10 66,626 ± 1,235 ops/s
FromJsonBenchmark.vectorReader thrpt 10 67,702 ± 2,501 ops/s
*/

@Benchmark
def parseFromStringToCaseClass(): Unit = {
val product = getFromJSON[Product](JsonBenchmark.json)
assert(product.version == 2)
}

@Benchmark
def vectorReader(): Unit = {
fromJSON[Vector[Int]](JsonBenchmark.lotsOfIntsAsJson)
}

@Benchmark
def listReader(): Unit = {
fromJSON[List[Int]](JsonBenchmark.lotsOfIntsAsJson)
}

@Benchmark
def seqReader(): Unit = {
fromJSON[Seq[Int]](JsonBenchmark.lotsOfIntsAsJson)
}

}

63 changes: 6 additions & 57 deletions benchmarks/src/main/scala/json/JsonBenchmark.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,63 +5,9 @@ import java.util.UUID
import io.sphere.json._
import io.sphere.json.generic._
import io.sphere.util.BaseMoney
import org.json4s.StringInput
import org.json4s.jackson._
import org.openjdk.jmh.annotations._

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
@Warmup(iterations = 10, time = 1)
@Measurement(iterations = 10, time = 1)
@Fork(value = 1)
class JsonBenchmark {

/* on local mac
jmh:run
Benchmark Mode Cnt Score Error Units
JsonBenchmark.listReader thrpt 5 65,248 ± 17,094 ops/s
JsonBenchmark.parseFromStringToCaseClass thrpt 5 13,365 ± 0,467 ops/s
JsonBenchmark.parseFromStringToJValue thrpt 5 84,705 ± 12,377 ops/s
JsonBenchmark.seqReader thrpt 5 64,475 ± 14,184 ops/s
JsonBenchmark.serializeCaseClassToString thrpt 5 40,563 ± 4,731 ops/s
JsonBenchmark.vectorReader thrpt 5 66,068 ± 7,377 ops/s
*/

@Benchmark
def parseFromStringToJValue(): Unit = {
val jvalue = parseJson(StringInput(JsonBenchmark.json))
assert(jvalue != null)
}

@Benchmark
def parseFromStringToCaseClass(): Unit = {
val product = getFromJSON[Product](JsonBenchmark.json)
assert(product.version == 2)
}

@Benchmark
def serializeCaseClassToString(): Unit = {
val json = toJSON[Product](JsonBenchmark.product)
assert(json != null)
}

@Benchmark
def vectorReader(): Unit = {
fromJSON[Vector[Int]](JsonBenchmark.lotsOfInts)
}

@Benchmark
def listReader(): Unit = {
fromJSON[List[Int]](JsonBenchmark.lotsOfInts)
}

@Benchmark
def seqReader(): Unit = {
fromJSON[Seq[Int]](JsonBenchmark.lotsOfInts)
}

}
import scala.collection.generic.CanBuildFrom
import scala.language.higherKinds

case class Reference(typeId: String, id: UUID)

Expand Down Expand Up @@ -93,7 +39,10 @@ object Product {

object JsonBenchmark {

val lotsOfInts = Range(1, 100000).mkString("[", ",", "]")
val lotsOfIntsList = Range(1, 100000).toList
val lotsOfIntsSeq = Range(1, 100000).toSeq
val lotsOfIntsVector = Range(1, 100000).toVector
val lotsOfIntsAsJson = Range(1, 100000).mkString("[", ",", "]")

val prices = for (i 1 to 200) yield
s"""
Expand Down
27 changes: 27 additions & 0 deletions benchmarks/src/main/scala/json/ParseJsonBenchmark.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package json

import org.json4s.StringInput
import org.json4s.jackson._
import org.openjdk.jmh.annotations._

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
@Warmup(iterations = 10, time = 1)
@Measurement(iterations = 10, time = 1)
@Fork(value = 1)
class ParseJsonBenchmark {

/* on local mac
jmh:run
Benchmark Mode Cnt Score Error Units
ParseJsonBenchmark.parseFromStringToJValue thrpt 10 85,322 ± 1,073 ops/s
*/

@Benchmark
def parseFromStringToJValue(): Unit = {
val jvalue = parseJson(StringInput(JsonBenchmark.json))
assert(jvalue != null)
}
}

50 changes: 50 additions & 0 deletions benchmarks/src/main/scala/json/ToJsonBenchmark.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package json

import java.util.UUID

import io.sphere.json._
import io.sphere.json.generic._
import io.sphere.util.BaseMoney
import org.json4s.StringInput
import org.json4s.jackson._
import org.openjdk.jmh.annotations._

@State(Scope.Benchmark)
@BenchmarkMode(Array(Mode.Throughput))
@Warmup(iterations = 10, time = 1)
@Measurement(iterations = 10, time = 1)
@Fork(value = 1)
class ToJsonBenchmark {

/* on local mac
jmh:run
Benchmark Mode Cnt Score Error Units
ToJsonBenchmark.listWriter thrpt 10 70,065 ± 0,967 ops/s
ToJsonBenchmark.seqWriter thrpt 10 63,512 ± 3,889 ops/s
ToJsonBenchmark.serializeCaseClassToString thrpt 10 37,925 ± 2,252 ops/s
ToJsonBenchmark.vectorWriter thrpt 10 63,762 ± 1,470 ops/s
*/

@Benchmark
def serializeCaseClassToString(): Unit = {
val json = toJSON[Product](JsonBenchmark.product)
assert(json != null)
}

@Benchmark
def vectorWriter(): Unit = {
toJSON[Vector[Int]](JsonBenchmark.lotsOfIntsVector)
}

@Benchmark
def listWriter(): Unit = {
toJSON[List[Int]](JsonBenchmark.lotsOfIntsList)
}

@Benchmark
def seqWriter(): Unit = {
toJSON[Seq[Int]](JsonBenchmark.lotsOfIntsSeq)
}

}

0 comments on commit b5f38d5

Please sign in to comment.