59 lines · 906 B · Go
RawDownload
// +build go1.7 package errors import (	"fmt"	"testing" 	stderrors "errors") func noErrors(at, depth int) error {	if at >= depth {		return stderrors.New("no error")	}	return noErrors(at+1, depth)}func yesErrors(at, depth int) error {	if at >= depth {		return New("ye error")	}	return yesErrors(at+1, depth)} func BenchmarkErrors(b *testing.B) {	var toperr error	type run struct {		stack int		std   bool	}	runs := []run{		{10, false},		{10, true},		{100, false},		{100, true},		{1000, false},		{1000, true},	}	for _, r := range runs {		part := "pkg/errors"		if r.std {			part = "errors"		}		name := fmt.Sprintf("%s-stack-%d", part, r.stack)		b.Run(name, func(b *testing.B) {			var err error			f := yesErrors			if r.std {				f = noErrors			}			b.ReportAllocs()			for i := 0; i < b.N; i++ {				err = f(0, r.stack)			}			b.StopTimer()			toperr = err		})	}}