// Copyright 2018 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 errors_test

import (
	"bytes"
	fmtcore "fmt"
	"math/big"
	"testing"

	"golang.org/x/exp/errors"
	"golang.org/x/exp/errors/fmt"
	"golang.org/x/exp/errors/internal"
)

type myType struct{}

func (myType) Format(s fmt.State, v rune) {
	s.Write(bytes.Repeat([]byte("Hi! "), 10))
}

func BenchmarkErrorf(b *testing.B) {
	err := errors.New("foo")
	// pi := big.NewFloat(3.14) // Something expensive.
	num := big.NewInt(5)
	args := func(a ...interface{}) []interface{} { return a }
	benchCases := []struct {
		name   string
		format string
		args   []interface{}
	}{
		{"no_format", "msg: %v", args(err)},
		{"with_format", "failed %d times: %v", args(5, err)},
		{"method: mytype", "pi: %v", args("myfile.go", myType{}, err)},
		{"method: number", "pi: %v", args("myfile.go", num, err)},
	}
	for _, bc := range benchCases {
		b.Run(bc.name, func(b *testing.B) {
			b.Run("ExpWithTrace", func(b *testing.B) {
				for i := 0; i < b.N; i++ {
					fmt.Errorf(bc.format, bc.args...)
				}
			})
			b.Run("ExpNoTrace", func(b *testing.B) {
				internal.EnableTrace = false
				defer func() { internal.EnableTrace = true }()

				for i := 0; i < b.N; i++ {
					fmt.Errorf(bc.format, bc.args...)
				}
			})
			b.Run("Core", func(b *testing.B) {
				for i := 0; i < b.N; i++ {
					fmtcore.Errorf(bc.format, bc.args...)
				}
			})
		})
	}
}
