Skip to content

Commit 084a758

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

14 files changed

+86
-60
lines changed

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

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

55
import com.github.plokhotnyuk.jsoniter_scala.core._
6-
//import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
6+
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
77
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
88
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
99
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats.javaEnumArrayFormat
10-
//import io.circe.parser._
11-
//import io.circe.syntax._
10+
import io.circe.parser._
11+
import io.circe.syntax._
1212
import org.openjdk.jmh.annotations.Benchmark
1313
import play.api.libs.json.Json
1414

@@ -23,10 +23,10 @@ class ArrayOfJavaEnumsBenchmark extends CommonParams {
2323
}.toArray
2424
val jsonString: String = obj.mkString("[\"", "\",\"", "\"]")
2525
val jsonBytes: Array[Byte] = jsonString.getBytes(UTF_8)
26-
/* FIXME circe doesn't support Java enums
26+
2727
@Benchmark
2828
def readCirce(): Array[Suit] = decode[Array[Suit]](new String(jsonBytes, UTF_8)).fold(throw _, x => x)
29-
*/
29+
3030
@Benchmark
3131
def readJacksonScala(): Array[Suit] = jacksonMapper.readValue[Array[Suit]](jsonBytes)
3232

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

3636
@Benchmark
3737
def readPlayJson(): Array[Suit] = Json.parse(jsonBytes).as[Array[Suit]](javaEnumArrayFormat)
38-
/* FIXME circe doesn't support Java enums
38+
3939
@Benchmark
4040
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
41-
*/
41+
4242
@Benchmark
4343
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
4444

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import com.github.plokhotnyuk.jsoniter_scala.core._
77
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
88
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
99
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
10+
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats.offsetTimeArrayFormat
1011
import io.circe.java8.time._
1112
import io.circe.parser._
1213
import io.circe.syntax._
1314
import org.openjdk.jmh.annotations.Benchmark
14-
//import play.api.libs.json.Json
15+
import play.api.libs.json.Json
1516

1617
class ArrayOfOffsetTimesBenchmark extends CommonParams {
1718
val obj: Array[OffsetTime] = (1 to 128).map { i =>
@@ -28,10 +29,10 @@ class ArrayOfOffsetTimesBenchmark extends CommonParams {
2829

2930
@Benchmark
3031
def readJsoniterScala(): Array[OffsetTime] = readFromArray[Array[OffsetTime]](jsonBytes)
31-
/* FIXME Play-JSON doesn't support OffsetTime
32+
3233
@Benchmark
33-
def readPlayJson(): Array[OffsetTime] = Json.parse(jsonBytes).as[Array[OffsetTime]]
34-
*/
34+
def readPlayJson(): Array[OffsetTime] = Json.parse(jsonBytes).as[Array[OffsetTime]](offsetTimeArrayFormat)
35+
3536
@Benchmark
3637
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
3738

@@ -44,8 +45,6 @@ class ArrayOfOffsetTimesBenchmark extends CommonParams {
4445
@Benchmark
4546
def writeJsoniterScalaPrealloc(): Int = writeToPreallocatedArray(obj, preallocatedBuf, 0)
4647

47-
/* FIXME Play-JSON doesn't support OffsetTime
4848
@Benchmark
49-
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj))
50-
*/
49+
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj)(offsetTimeArrayFormat))
5150
}
Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,38 @@
11
package com.github.plokhotnyuk.jsoniter_scala.macros
22

3-
//import java.nio.charset.StandardCharsets._
3+
import java.nio.charset.StandardCharsets._
44
import java.time.ZoneOffset
55

66
import com.github.plokhotnyuk.jsoniter_scala.core._
7-
//import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
7+
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats.zoneOffsetArrayFormat
8+
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
89
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
910
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
10-
//import io.circe.java8.time._
11-
//import io.circe.parser._
12-
//import io.circe.syntax._
11+
import io.circe.parser._
12+
import io.circe.syntax._
1313
import org.openjdk.jmh.annotations.Benchmark
14-
//import play.api.libs.json.Json
14+
import play.api.libs.json.Json
1515

1616
class ArrayOfZoneOffsetsBenchmark extends CommonParams {
1717
val obj: Array[ZoneOffset] = (1 to 128).map(i => ZoneOffset.ofHoursMinutesSeconds(i % 17, (i % 4) * 15, 0)).toArray
1818
val jsonString: String = obj.mkString("[\"", "\",\"", "\"]")
1919
val jsonBytes: Array[Byte] = jsonString.getBytes
20-
/* FIXME Circe require custom decoder
20+
2121
@Benchmark
2222
def readCirce(): Array[ZoneOffset] = decode[Array[ZoneOffset]](new String(jsonBytes, UTF_8)).fold(throw _, x => x)
23-
*/
23+
2424
@Benchmark
2525
def readJacksonScala(): Array[ZoneOffset] = jacksonMapper.readValue[Array[ZoneOffset]](jsonBytes)
2626

2727
@Benchmark
2828
def readJsoniterScala(): Array[ZoneOffset] = readFromArray[Array[ZoneOffset]](jsonBytes)
29-
/* FIXME Play json require custom format
29+
3030
@Benchmark
31-
def readPlayJson(): Array[ZoneOffset] = Json.parse(jsonBytes).as[Array[ZoneOffset]]
32-
*/
33-
/* FIXME Circe require custom encoder
31+
def readPlayJson(): Array[ZoneOffset] = Json.parse(jsonBytes).as[Array[ZoneOffset]](zoneOffsetArrayFormat)
32+
3433
@Benchmark
3534
def writeCirce(): Array[Byte] = printer.pretty(obj.asJson).getBytes(UTF_8)
36-
*/
35+
3736
@Benchmark
3837
def writeJacksonScala(): Array[Byte] = jacksonMapper.writeValueAsBytes(obj)
3938

@@ -42,8 +41,7 @@ class ArrayOfZoneOffsetsBenchmark extends CommonParams {
4241

4342
@Benchmark
4443
def writeJsoniterScalaPrealloc(): Int = writeToPreallocatedArray(obj, preallocatedBuf, 0)
45-
/* FIXME Play json require custom format
44+
4645
@Benchmark
47-
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj))
48-
*/
46+
def writePlayJson(): Array[Byte] = Json.toBytes(Json.toJson(obj)(zoneOffsetArrayFormat))
4947
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.github.plokhotnyuk.jsoniter_scala.macros
22

3+
import java.time.ZoneOffset
4+
5+
import cats.syntax.either._
36
import io.circe._
47
import io.circe.generic.extras._
58
import io.circe.generic.extras.semiauto._
@@ -17,4 +20,12 @@ object CirceEncodersDecoders {
1720
implicit val adtDecoder: Decoder[AdtBase] = deriveDecoder[AdtBase]
1821
implicit val enumEncoder: Encoder[SuitEnum.Value] = Encoder.enumEncoder(SuitEnum)
1922
implicit val enumDecoder: Decoder[SuitEnum.Value] = Decoder.enumDecoder(SuitEnum)
23+
implicit val suitEncoder: Encoder[Suit] = Encoder.encodeString.contramap[Suit](_.toString)
24+
implicit val suitDecoder: Decoder[Suit] = Decoder.decodeString.emap { str =>
25+
Either.catchNonFatal(Suit.valueOf(str)).leftMap(t => "Suit")
26+
}
27+
implicit val zoneOffsetEncoder: Encoder[ZoneOffset] = Encoder.encodeString.contramap[ZoneOffset](_.toString)
28+
implicit val zoneOffsetDecoder: Decoder[ZoneOffset] = Decoder.decodeString.emap { str =>
29+
Either.catchNonFatal(ZoneOffset.of(str)).leftMap(t => "Suit")
30+
}
2031
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.plokhotnyuk.jsoniter_scala.macros
22

33
import com.fasterxml.jackson.annotation.JsonInclude.Include
44
import com.fasterxml.jackson.core.JsonToken._
5+
import com.fasterxml.jackson.core.`type`.TypeReference
56
import com.fasterxml.jackson.core.{JsonFactory, JsonGenerator, JsonParser, JsonParseException => ParseException}
67
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
78
import com.fasterxml.jackson.databind.module.SimpleModule
@@ -12,7 +13,7 @@ import com.fasterxml.jackson.module.afterburner.AfterburnerModule
1213
import com.fasterxml.jackson.module.scala.DefaultScalaModule
1314
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
1415

15-
import scala.collection.immutable.BitSet
16+
import scala.collection.immutable.{BitSet, HashMap, Map}
1617
import scala.collection.mutable
1718

1819
object JacksonSerDesers {
@@ -101,3 +102,20 @@ class ByteArraySerializer extends StdSerializer[Array[Byte]](classOf[Array[Byte]
101102

102103
override def isEmpty(provider: SerializerProvider, value: Array[Byte]): Boolean = value.isEmpty
103104
}
105+
106+
class CustomMapDeserializer extends
107+
StdDeserializer[Map[Int, HashMap[Long, Double]]](classOf[Map[Int, HashMap[Long, Double]]]) {
108+
override def deserialize(p: JsonParser, ctxt: DeserializationContext): Map[Int, HashMap[Long, Double]] =
109+
p.readValueAs(new TypeReference[Map[java.lang.Integer, HashMap[java.lang.Long, Double]]]{})
110+
111+
override def getNullValue(ctxt: DeserializationContext): Map[Int, HashMap[Long, Double]] = Map.empty
112+
}
113+
114+
class CustomMutableMapDeserializer extends
115+
StdDeserializer[mutable.Map[Int, mutable.OpenHashMap[Long, Double]]](classOf[mutable.Map[Int, mutable.OpenHashMap[Long, Double]]]) {
116+
override def deserialize(p: JsonParser, ctxt: DeserializationContext): mutable.Map[Int, mutable.OpenHashMap[Long, Double]] =
117+
p.readValueAs(new TypeReference[mutable.Map[java.lang.Integer, mutable.OpenHashMap[java.lang.Long, Double]]]{})
118+
119+
override def getNullValue(ctxt: DeserializationContext): mutable.Map[Int, mutable.OpenHashMap[Long, Double]] =
120+
mutable.Map.empty
121+
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package com.github.plokhotnyuk.jsoniter_scala.macros
22

33
import java.nio.charset.StandardCharsets._
44

5+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
56
import com.github.plokhotnyuk.jsoniter_scala.core._
67
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
7-
//import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
8+
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
89
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
910
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats._
1011
import io.circe.generic.auto._
@@ -15,7 +16,8 @@ import play.api.libs.json.Json
1516

1617
import scala.collection.immutable.{HashMap, Map}
1718

18-
case class Maps(m: HashMap[String, Double], mm: Map[Int, HashMap[Long, Double]])
19+
case class Maps(m: HashMap[String, Double],
20+
@JsonDeserialize(using = classOf[CustomMapDeserializer]) mm: Map[Int, HashMap[Long, Double]])
1921

2022
class MapsBenchmark extends CommonParams {
2123
val obj: Maps = Maps(HashMap("1" -> 1.1, "2" -> 2.2), Map(1 -> HashMap(3L -> 3.3), 2 -> HashMap.empty[Long, Double]))
@@ -24,10 +26,10 @@ class MapsBenchmark extends CommonParams {
2426

2527
@Benchmark
2628
def readCirce(): Maps = decode[Maps](new String(jsonBytes, UTF_8)) .fold(throw _, x => x)
27-
/*FIXME: Jackson-module-scala parse keys as String
29+
2830
@Benchmark
2931
def readJacksonScala(): Maps = jacksonMapper.readValue[Maps](jsonBytes)
30-
*/
32+
3133
@Benchmark
3234
def readJsoniterScala(): Maps = readFromArray[Maps](jsonBytes)
3335

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ class MutableIterablesBenchmark extends CommonParams {
2929
@Benchmark
3030
def readJacksonScala(): MutableIterables = jacksonMapper.readValue[MutableIterables](jsonBytes)
3131
*/
32-
3332
@Benchmark
3433
def readJsoniterScala(): MutableIterables = readFromArray[MutableIterables](jsonBytes)
3534

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package com.github.plokhotnyuk.jsoniter_scala.macros
22

33
import java.nio.charset.StandardCharsets._
44

5+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
56
import com.github.plokhotnyuk.jsoniter_scala.core._
67
import com.github.plokhotnyuk.jsoniter_scala.macros.CirceEncodersDecoders._
7-
//import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
8+
import com.github.plokhotnyuk.jsoniter_scala.macros.JacksonSerDesers._
89
import com.github.plokhotnyuk.jsoniter_scala.macros.JsoniterCodecs._
910
import com.github.plokhotnyuk.jsoniter_scala.macros.PlayJsonFormats._
1011
import io.circe.generic.auto._
@@ -15,7 +16,8 @@ import play.api.libs.json.Json
1516

1617
import scala.collection.mutable
1718

18-
case class MutableMaps(m: mutable.HashMap[String, Double], mm: mutable.Map[Int, mutable.OpenHashMap[Long, Double]])
19+
case class MutableMaps(m: mutable.HashMap[String, Double],
20+
@JsonDeserialize(using = classOf[CustomMutableMapDeserializer]) mm: mutable.Map[Int, mutable.OpenHashMap[Long, Double]])
1921

2022
class MutableMapsBenchmark extends CommonParams {
2123
val obj: MutableMaps = MutableMaps(mutable.HashMap("1" -> 1.1, "2" -> 2.2),
@@ -27,10 +29,9 @@ class MutableMapsBenchmark extends CommonParams {
2729
@Benchmark
2830
def readCirce(): MutableMaps = decode[MutableMaps](new String(jsonBytes, UTF_8)).fold(throw _, x => x)
2931
*/
30-
/*FIXME: Jackson-module-scala parse keys as String
3132
@Benchmark
3233
def readJacksonScala(): MutableMaps = jacksonMapper.readValue[MutableMaps](jsonBytes)
33-
*/
34+
3435
@Benchmark
3536
def readJsoniterScala(): MutableMaps = readFromArray[MutableMaps](jsonBytes)
3637

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.plokhotnyuk.jsoniter_scala.macros
22

3+
import java.time.{OffsetTime, ZoneOffset}
4+
35
import julienrf.json.derived.flat
46
import play.api.libs.json._
57
import ai.x.play.json.Jsonx
@@ -124,4 +126,10 @@ object PlayJsonFormats {
124126
Reads[Array[BigInt]](js => JsSuccess(js.as[Array[JsNumber]]
125127
.map(js => js.value.toBigIntExact().getOrElse(throw new NumberFormatException("illegal BigInt value"))))),
126128
Writes[Array[BigInt]](es => JsArray(es.map(v => JsNumber(BigDecimal(v))))))
129+
val offsetTimeArrayFormat: Format[Array[OffsetTime]] = Format(
130+
Reads[Array[OffsetTime]](js => JsSuccess(js.as[Array[JsString]].map(js => OffsetTime.parse(js.value)))),
131+
Writes[Array[OffsetTime]](es => JsArray(es.map(v => JsString(v.toString)))))
132+
val zoneOffsetArrayFormat: Format[Array[ZoneOffset]] = Format(
133+
Reads[Array[ZoneOffset]](js => JsSuccess(js.as[Array[JsString]].map(js => ZoneOffset.of(js.value)))),
134+
Writes[Array[ZoneOffset]](es => JsArray(es.map(v => JsString(v.toString)))))
127135
}

benchmark/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfJavaEnumsBenchmarkSpec.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ class ArrayOfJavaEnumsBenchmarkSpec extends BenchmarkSpecBase {
55

66
"ArrayOfJavaEnumsBenchmark" should {
77
"deserialize properly" in {
8-
//FIXME circe doesn't support Java enums
9-
//benchmark.readCirce().deep shouldBe benchmark.obj.deep
8+
benchmark.readCirce().deep shouldBe benchmark.obj.deep
109
benchmark.readJacksonScala().deep shouldBe benchmark.obj.deep
1110
benchmark.readJsoniterScala().deep shouldBe benchmark.obj.deep
1211
benchmark.readPlayJson().deep shouldBe benchmark.obj.deep
1312
}
1413
"serialize properly" in {
15-
//FIXME circe doesn't support Java enums
16-
//toString(benchmark.writeCirce()) shouldBe benchmark.jsonString
14+
toString(benchmark.writeCirce()) shouldBe benchmark.jsonString
1715
toString(benchmark.writeJacksonScala()) shouldBe benchmark.jsonString
1816
toString(benchmark.writeJsoniterScala()) shouldBe benchmark.jsonString
1917
toString(benchmark.preallocatedBuf, benchmark.writeJsoniterScalaPrealloc()) shouldBe benchmark.jsonString

benchmark/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfOffsetTimesBenchmarkSpec.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@ class ArrayOfOffsetTimesBenchmarkSpec extends BenchmarkSpecBase {
88
benchmark.readCirce().deep shouldBe benchmark.obj.deep
99
benchmark.readJacksonScala().deep shouldBe benchmark.obj.deep
1010
benchmark.readJsoniterScala().deep shouldBe benchmark.obj.deep
11-
//FIXME Play-JSON doesn't support OffsetTime
12-
//benchmark.readPlayJson().deep shouldBe benchmark.obj.deep
11+
benchmark.readPlayJson().deep shouldBe benchmark.obj.deep
1312
}
1413
"serialize properly" in {
1514
toString(benchmark.writeCirce()) shouldBe benchmark.jsonString
1615
toString(benchmark.writeJacksonScala()) shouldBe benchmark.jsonString
1716
toString(benchmark.writeJsoniterScala()) shouldBe benchmark.jsonString
1817
toString(benchmark.preallocatedBuf, benchmark.writeJsoniterScalaPrealloc()) shouldBe benchmark.jsonString
19-
//FIXME Play-JSON doesn't support OffsetTime
20-
//toString(benchmark.writePlayJson()) shouldBe benchmark.jsonString
18+
toString(benchmark.writePlayJson()) shouldBe benchmark.jsonString
2119
}
2220
}
2321
}

benchmark/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/ArrayOfZoneOffsetsBenchmarkSpec.scala

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,17 @@ class ArrayOfZoneOffsetsBenchmarkSpec extends BenchmarkSpecBase {
55

66
"ArrayOfZoneOffsetsBenchmark" should {
77
"deserialize properly" in {
8-
//FIXME Circe require custom decoder
9-
//benchmark.readCirce().deep shouldBe benchmark.obj.deep
8+
benchmark.readCirce().deep shouldBe benchmark.obj.deep
109
benchmark.readJacksonScala().deep shouldBe benchmark.obj.deep
1110
benchmark.readJsoniterScala().deep shouldBe benchmark.obj.deep
12-
//FIXME Play json require custom format
13-
//benchmark.readPlayJson().deep shouldBe benchmark.obj.deep
11+
benchmark.readPlayJson().deep shouldBe benchmark.obj.deep
1412
}
1513
"serialize properly" in {
16-
//FIXME Circe require custom encoder
17-
//toString(benchmark.writeCirce()) shouldBe benchmark.jsonString
14+
toString(benchmark.writeCirce()) shouldBe benchmark.jsonString
1815
toString(benchmark.writeJacksonScala()) shouldBe benchmark.jsonString
1916
toString(benchmark.writeJsoniterScala()) shouldBe benchmark.jsonString
2017
toString(benchmark.preallocatedBuf, benchmark.writeJsoniterScalaPrealloc()) shouldBe benchmark.jsonString
21-
//FIXME Play json require custom format
22-
//toString(benchmark.writePlayJson()) shouldBe benchmark.jsonString
18+
toString(benchmark.writePlayJson()) shouldBe benchmark.jsonString
2319
}
2420
}
2521
}

benchmark/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/MapsBenchmarkSpec.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ class MapsBenchmarkSpec extends BenchmarkSpecBase {
66
"MapsBenchmark" should {
77
"deserialize properly" in {
88
benchmark.readCirce() shouldBe benchmark.obj
9-
//FIXME: Jackson-module-scala parse keys as String
10-
//benchmark.readJacksonScala() shouldBe benchmark.obj
9+
benchmark.readJacksonScala() shouldBe benchmark.obj
1110
benchmark.readJsoniterScala() shouldBe benchmark.obj
1211
benchmark.readPlayJson() shouldBe benchmark.obj
1312
}

benchmark/src/test/scala/com/github/plokhotnyuk/jsoniter_scala/macros/MutableMapsBenchmarkSpec.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ class MutableMapsBenchmarkSpec extends BenchmarkSpecBase {
77
"deserialize properly" in {
88
//FIXME: Circe doesn't support parsing of mutable maps
99
//benchmark.readCirce() shouldBe benchmark.obj
10-
//FIXME: Jackson-module-scala parse keys as String
11-
//benchmark.readJacksonScala() shouldBe benchmark.obj
10+
benchmark.readJacksonScala() shouldBe benchmark.obj
1211
benchmark.readJsoniterScala() shouldBe benchmark.obj
1312
benchmark.readPlayJson() shouldBe benchmark.obj
1413
}

0 commit comments

Comments
 (0)