49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package errorx_test
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/yuninks/errorx"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 错误路径的性能基准。以下是在 Ryzen 7 5800H / go1.26 上的参考值:
|
||
|
|
//
|
||
|
|
// BenchmarkErr 370 ns/op 160 B/op 2 allocs/op (含一次调用栈采集)
|
||
|
|
// BenchmarkErrKV 825 ns/op 944 B/op 7 allocs/op
|
||
|
|
// BenchmarkWrap 543 ns/op 272 B/op 3 allocs/op
|
||
|
|
// BenchmarkMsg 133 ns/op 16 B/op 1 allocs/op (只渲染文案,不抓栈)
|
||
|
|
//
|
||
|
|
// 栈只在构造错误值时抓取一次,且只存程序计数器;函数名/文件/行号在调用
|
||
|
|
// StackTrace() 或 %+v 时才解析。
|
||
|
|
var benchErr = errorx.New("bench_err", 1, "基准错误: #a#")
|
||
|
|
|
||
|
|
func BenchmarkErr(b *testing.B) {
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
_ = benchErr.Err()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func BenchmarkErrKV(b *testing.B) {
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
_ = benchErr.ErrKV("a", "1")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func BenchmarkWrap(b *testing.B) {
|
||
|
|
cause := errors.New("boom")
|
||
|
|
b.ResetTimer()
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
_ = benchErr.Wrap(cause)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func BenchmarkMsg(b *testing.B) {
|
||
|
|
ctx := context.Background()
|
||
|
|
b.ResetTimer()
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
_ = benchErr.Msg(ctx)
|
||
|
|
}
|
||
|
|
}
|