summaryrefslogtreecommitdiff
path: root/benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt')
-rw-r--r--benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt35
1 files changed, 35 insertions, 0 deletions
diff --git a/benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt b/benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt
new file mode 100644
index 00000000..1ba89668
--- /dev/null
+++ b/benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt
@@ -0,0 +1,35 @@
+package kotlinx.benchmarks.json
+
+import kotlinx.benchmarks.model.*
+import kotlinx.serialization.*
+import kotlinx.serialization.json.*
+import kotlinx.serialization.json.Json.Default.decodeFromString
+import kotlinx.serialization.json.Json.Default.encodeToString
+import org.openjdk.jmh.annotations.*
+import java.util.concurrent.*
+
+@Warmup(iterations = 7, time = 1)
+@Measurement(iterations = 7, time = 1)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.SECONDS)
+@State(Scope.Benchmark)
+@Fork(2)
+open class CitmBenchmark {
+ /*
+ * For some reason Citm is kind of de-facto standard cross-language benchmark.
+ * Order of magnitude: 200 ops/sec
+ */
+ private val input = CitmBenchmark::class.java.getResource("/citm_catalog.json").readBytes().decodeToString()
+ private val citm = Json.decodeFromString(CitmCatalog.serializer(), input)
+
+ @Setup
+ fun init() {
+ require(citm == Json.decodeFromString(CitmCatalog.serializer(), Json.encodeToString(citm)))
+ }
+
+ @Benchmark
+ fun decodeCitm(): CitmCatalog = Json.decodeFromString(CitmCatalog.serializer(), input)
+
+ @Benchmark
+ fun encodeCitm(): String = Json.encodeToString(CitmCatalog.serializer(), citm)
+}