// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import (
	"flag"
	"fmt"
	"os"
	"testing"
)

// Run as a test, reports allocation time statistics for stack, heap, and globally
// allocated buffers, out to the 99.9999th percentile.  Optionally reports worst
// allocation time if -worst is specified, but this is normally too noisy for any
// sort of trend tracking or alerting.  The default test usually runs long enough that
// it requires only one iteration.

func TestMain(m *testing.M) {
	flag.BoolVar(&reportWorstFlag, "worst", false, "report otherwise too-noisy 'worst' metric in benchmark")
	flag.Parse()
	os.Exit(m.Run())
}

type testCase struct {
	howAlloc  string
	withFluff bool
}

func BenchmarkGCLatency(b *testing.B) {
	tcs := []testCase{
		{"stack", false},
		{"stack", true},
		{"heap", false},
		{"heap", true},
		{"global", false},
		{"global", true},
	}

	if testing.Short() {
		tcs = []testCase{
			{"stack", false},
			{"heap", false},
			{"global", false},
		}
	}

	for _, tc := range tcs {
		lb := &LB{doFluff: tc.withFluff, howAllocated: tc.howAlloc}
		b.Run(fmt.Sprintf("how=%s/fluff=%v", tc.howAlloc, tc.withFluff),
			func(b *testing.B) { lb.bench(b) })
	}
}
