diff --git a/benchmark/bench_datasets_test.go b/benchmark/bench_datasets_test.go new file mode 100644 index 0000000..34c892f --- /dev/null +++ b/benchmark/bench_datasets_test.go @@ -0,0 +1,68 @@ +package benchmark_test + +import ( + "compress/gzip" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +var bench_inputs = []string{ + // from https://gist.githubusercontent.com/feeeper/2197d6d734729625a037af1df14cf2aa/raw/2f22b120e476d897179be3c1e2483d18067aa7df/config.toml + "config", + + // converted from https://github.com/miloyip/nativejson-benchmark + "canada", + "citm_catalog", + "twitter", + "code", + + // converted from https://raw.githubusercontent.com/mailru/easyjson/master/benchmark/example.json + "example", +} + +func BenchmarkUnmarshalDataset(b *testing.B) { + for _, tc := range bench_inputs { + buf := fixture(b, tc) + b.Run(tc, func(b *testing.B) { + bench(b, func(r runner, b *testing.B) { + if r.name == "bs" && tc == "canada" { + // bs can't handle the canada dataset due to mixed integer & + // floats values in an array. + b.Skip() + } + + b.SetBytes(int64(len(buf))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + var v interface{} + check(b, r.unmarshal(buf, &v)) + } + }) + }) + } +} + +// fixture returns the uncompressed contents of path. +func fixture(tb testing.TB, path string) []byte { + f, err := os.Open(filepath.Join("testdata", path+".toml.gz")) + check(tb, err) + defer f.Close() + + gz, err := gzip.NewReader(f) + check(tb, err) + + buf, err := ioutil.ReadAll(gz) + check(tb, err) + + return buf +} + +func check(tb testing.TB, err error) { + if err != nil { + tb.Helper() + tb.Fatal(err) + } +} diff --git a/benchmark/testdata/canada.toml.gz b/benchmark/testdata/canada.toml.gz new file mode 100644 index 0000000..eb895ba Binary files /dev/null and b/benchmark/testdata/canada.toml.gz differ diff --git a/benchmark/testdata/citm_catalog.toml.gz b/benchmark/testdata/citm_catalog.toml.gz new file mode 100644 index 0000000..f1cb4cf Binary files /dev/null and b/benchmark/testdata/citm_catalog.toml.gz differ diff --git a/benchmark/testdata/code.toml.gz b/benchmark/testdata/code.toml.gz new file mode 100644 index 0000000..0885720 Binary files /dev/null and b/benchmark/testdata/code.toml.gz differ diff --git a/benchmark/testdata/config.toml.gz b/benchmark/testdata/config.toml.gz new file mode 100644 index 0000000..8c95e92 Binary files /dev/null and b/benchmark/testdata/config.toml.gz differ diff --git a/benchmark/testdata/example.toml.gz b/benchmark/testdata/example.toml.gz new file mode 100644 index 0000000..b2a76e2 Binary files /dev/null and b/benchmark/testdata/example.toml.gz differ diff --git a/benchmark/testdata/twitter.toml.gz b/benchmark/testdata/twitter.toml.gz new file mode 100644 index 0000000..12165c8 Binary files /dev/null and b/benchmark/testdata/twitter.toml.gz differ