From 759675418054928c287d604e920478e6c5939cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Balv=C3=ADn?= Date: Sun, 20 Sep 2026 22:15:10 +0200 Subject: [PATCH] test(bench): measure the long document on the typed decode and marshal paths --- bench_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ docs/BENCHMARKING.md | 8 +++++--- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/bench_test.go b/bench_test.go index 804004f..05261a1 100644 --- a/bench_test.go +++ b/bench_test.go @@ -127,3 +127,44 @@ func BenchmarkParseLong(b *testing.B) { } } } + +// benchLongEntry mirrors one [[entry]] element of longDoc for the typed +// decode of the long document. +type benchLongEntry struct { + Name string `toml:"name"` + Weight int `toml:"weight"` + When time.Time `toml:"when"` + Ratio float64 `toml:"ratio"` + Tags []string `toml:"tags"` +} + +type benchLongDoc struct { + Title string `toml:"title"` + Entry []benchLongEntry `toml:"entry"` +} + +func BenchmarkStrictDecodeLong(b *testing.B) { + dec := NewDecoder().DisallowUnknownFields() + b.ReportAllocs() + b.SetBytes(int64(len(longDoc))) + for b.Loop() { + var doc benchLongDoc + if err := dec.Decode(longDoc, &doc); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkMarshalLong(b *testing.B) { + tree, err := ParseMap(longDoc) + if err != nil { + b.Fatal(err) + } + b.ReportAllocs() + b.SetBytes(int64(len(longDoc))) + for b.Loop() { + if _, err := Marshal(tree); err != nil { + b.Fatal(err) + } + } +} diff --git a/docs/BENCHMARKING.md b/docs/BENCHMARKING.md index 12e9fde..b795420 100644 --- a/docs/BENCHMARKING.md +++ b/docs/BENCHMARKING.md @@ -9,10 +9,12 @@ The benchmarks live in `bench_test.go`, next to the code they measure: | Benchmark | What it measures | |---|---| -| `BenchmarkParse` | `Parse` over a representative configuration document | -| `BenchmarkMarshal` | `Marshal` of the tree `Parse` produced from the same document | +| `BenchmarkParse` | `ParseMap` over a representative configuration document | +| `BenchmarkMarshal` | `Marshal` of the tree `ParseMap` produced from the same document | | `BenchmarkStrictDecode` | `Decode` into a struct under `DisallowUnknownFields` | -| `BenchmarkParseLong` | `Parse` over a generated document with about 2000 array-of-tables entries | +| `BenchmarkParseLong` | `ParseMap` over a generated document with about 2000 array-of-tables entries | +| `BenchmarkStrictDecodeLong` | `Decode` into a typed document under `DisallowUnknownFields`, over the same long document | +| `BenchmarkMarshalLong` | `Marshal` of the tree `ParseMap` produced from the long document | ## Running