diff options
Diffstat (limited to 'benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt')
-rw-r--r-- | benchmark/src/jmh/kotlin/kotlinx/benchmarks/json/CitmBenchmark.kt | 35 |
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) +} |