Skip to content

Commit ddb59e4

Browse files
committed
More benchmarks for Circe, Jackson & Play-JSON
1 parent cce61d9 commit ddb59e4

28 files changed

+73
-69
lines changed

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/AdtBenchmark.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
1010
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
1111
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats._
1212
import io.circe.parser._
13-
//import io.circe.syntax._
13+
import io.circe.syntax._
1414
import org.openjdk.jmh.annotations.Benchmark
1515
import play.api.libs.json.Json
1616

@@ -30,6 +30,7 @@ case class C(l: AdtBase, r: AdtBase) extends AdtBase
3030
class AdtBenchmark extends CommonParams {
3131
val obj: AdtBase = C(A(1), B("VVV"))
3232
val jsonString: String = """{"type":"C","l":{"type":"A","a":1},"r":{"type":"B","b":"VVV"}}"""
33+
val jsonString2: String = """{"l":{"a":1,"type":"A"},"r":{"b":"VVV","type":"B"},"type":"C"}"""
3334
val jsonBytes: Array[Byte] = jsonString.getBytes
3435

3536
@Benchmark
@@ -43,10 +44,10 @@ class AdtBenchmark extends CommonParams {
4344

4445
@Benchmark
4546
def readPlayJson(): AdtBase = Json.parse(jsonBytes).as[AdtBase](adtFormat)
46-
/* FIXME: circe appends discriminator as a last field
47+
4748
@Benchmark
4849
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
49-
*/
50+
5051
@Benchmark
5152
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
5253

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfBigIntsBenchmark.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ package com.github.plokhotnyuk.jsoniter_scala.macros
33
import java.nio.charset.StandardCharsets._
44

55
import com.github.plokhotnyuk.jsoniter_scala.core._
6+
import play.api.libs.json.Json
67
//import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
78
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
89
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
9-
//import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats._
10+
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats._
1011
import io.circe.parser._
1112
//import io.circe.syntax._
1213
import org.openjdk.jmh.annotations.Benchmark
@@ -25,10 +26,9 @@ class ArrayOfBigIntsBenchmark extends CommonParams {
2526
@Benchmark
2627
def readJsoniterScala(): Array[BigInt] = readFromArray[Array[BigInt]](jsonBytes)
2728

28-
/* FIXME: add format for BigInt arrays
2929
@Benchmark
30-
def readPlayJson(): Array[BigInt] = Json.parse(jsonBytes).as[Array[BigInt]]
31-
*/
30+
def readPlayJson(): Array[BigInt] = Json.parse(jsonBytes).as[Array[BigInt]](bigIntArrayFormat)
31+
3232
/* FIXME: Circe uses an engineering decimal notation to serialize BigInt
3333
@Benchmark
3434
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
@@ -41,8 +41,8 @@ class ArrayOfBigIntsBenchmark extends CommonParams {
4141

4242
@Benchmark
4343
def writeJsoniterScalaPrealloc(): Int = writeToPreallocatedArray(obj, preallocatedBuf, 0)
44-
/* FIXME: add format for BigInt arrays
44+
/* FIXME: Play-json uses BigDecimal with engineering decimal representation to serialize numbers
4545
@Benchmark
46-
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj))
46+
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj)(bigIntArrayFormat))
4747
*/
4848
}

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfBytesBenchmark.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ class ArrayOfBytesBenchmark extends CommonParams {
3131
@Benchmark
3232
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
3333

34-
/* FIXME: jackson serializes an array of bytes to a string encoded in base64
3534
@Benchmark
3635
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
37-
*/
3836

3937
@Benchmark
4038
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfDurationsBenchmark.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ class ArrayOfDurationsBenchmark extends CommonParams {
3636

3737
@Benchmark
3838
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
39-
/* FIXME Jackson serializes Duration as a number
39+
4040
@Benchmark
4141
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
42-
*/
42+
4343
@Benchmark
4444
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4545

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfInstantsBenchmark.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,9 @@ class ArrayOfInstantsBenchmark extends CommonParams {
3333
@Benchmark
3434
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
3535

36-
/* FIXME Jackson serializes in format <epoch seconds>.<nanos>
3736
@Benchmark
3837
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
39-
*/
38+
4039
@Benchmark
4140
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4241

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfLocalDateTimesBenchmark.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ class ArrayOfLocalDateTimesBenchmark extends CommonParams {
3434

3535
@Benchmark
3636
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
37-
/* FIXME Jackson serializes LocalData in format [<year>,<month>,<day>,<hour>,<minute>,<second>]
37+
3838
@Benchmark
3939
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
40-
*/
40+
4141
@Benchmark
4242
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4343

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfLocalDatesBenchmark.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ class ArrayOfLocalDatesBenchmark extends CommonParams {
3232

3333
@Benchmark
3434
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
35-
/* FIXME Jackson serializes LocalData in format [<year>,<month>,<day>]
35+
3636
@Benchmark
3737
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
38-
*/
38+
3939
@Benchmark
4040
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4141

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfLocalTimesBenchmark.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,9 @@ class ArrayOfLocalTimesBenchmark extends CommonParams {
3333
@Benchmark
3434
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
3535

36-
/* FIXME jackson serializes LocalTime as array of numbers
3736
@Benchmark
3837
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
39-
*/
38+
4039
@Benchmark
4140
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4241

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfOffsetDateTimesBenchmark.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import java.time._
55

66
import com.github.plokhotnyuk.jsoniter_scala.core._
77
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
8-
//import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
8+
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
99
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
1010
import io.circe.java8.time._
1111
import io.circe.parser._
@@ -23,10 +23,10 @@ class ArrayOfOffsetDateTimesBenchmark extends CommonParams {
2323

2424
@Benchmark
2525
def readCirce(): Array[OffsetDateTime] = decode[Array[OffsetDateTime]](new String(jsonBytes, UTF_8)).fold(throw _, x => x)
26-
/* FIXME jackson parse OffsetDateTime with conversion to Z time zone
26+
2727
@Benchmark
2828
def readJacksonScala(): Array[OffsetDateTime] = jacksonMapper.readValue[Array[OffsetDateTime]](jsonBytes)
29-
*/
29+
3030
@Benchmark
3131
def readJsoniterScala(): Array[OffsetDateTime] = readFromArray[Array[OffsetDateTime]](jsonBytes)
3232

@@ -35,10 +35,10 @@ class ArrayOfOffsetDateTimesBenchmark extends CommonParams {
3535

3636
@Benchmark
3737
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
38-
/* FIXME jackson serializes OffsetDateTime as array of numbers
38+
3939
@Benchmark
4040
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
41-
*/
41+
4242
@Benchmark
4343
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4444

benchmark/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfOffsetTimesBenchmark.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ class ArrayOfOffsetTimesBenchmark extends CommonParams {
3434
*/
3535
@Benchmark
3636
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
37-
/* FIXME jackson serializes OffsetTime as array of numbers and string
37+
3838
@Benchmark
3939
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
40-
*/
40+
4141
@Benchmark
4242
def writeJsoniterScala(): Array[Byte] = writeToArray(obj)
4343

0 commit comments

Comments
 (0)