diff --git a/errors.go b/errors.go index 6c76562..be77876 100644 --- a/errors.go +++ b/errors.go @@ -21,7 +21,10 @@ package battery -import "fmt" +import ( + "fmt" + "strings" +) // ErrNotFound variable represents battery not found error. // @@ -118,16 +121,18 @@ func (p ErrPartial) noNil() bool { type Errors []error func (e Errors) Error() string { - s := "[" - for _, err := range e { + var s strings.Builder + s.WriteString("[") + for idx, err := range e { if err != nil { - s += err.Error() + " " + if idx >= 1 { + s.WriteString(" ") + } + s.WriteString(err.Error()) } } - if len(s) > 1 { - s = s[:len(s)-1] - } - return s + "]" + s.WriteString("]") + return s.String() } func wrapError(err error) error { diff --git a/errors_test.go b/errors_test.go index 5e91638..f3db9d6 100644 --- a/errors_test.go +++ b/errors_test.go @@ -66,6 +66,7 @@ func TestErrors(t *testing.T) { {Errors{ErrFatal{errors.New("t1")}}, "[Could not retrieve battery info: `t1`]"}, {Errors{ErrPartial{Full: errors.New("t2")}, ErrFatal{errors.New("t3")}}, "[{Full:t2} Could not retrieve battery info: `t3`]"}, {Errors{ErrPartial{Full: errors.New("t4")}, ErrPartial{Current: errors.New("t5")}}, "[{Full:t4} {Current:t5}]"}, + {Errors{ErrFatal{errors.New("testing error")}, nil}, "[Could not retrieve battery info: `testing error`]"}, } for i, c := range cases { @@ -76,3 +77,21 @@ func TestErrors(t *testing.T) { } } } + +func BenchmarkErrors_Error(b *testing.B) { + e := getErrors() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _ = e.Error() + } +} + +func getErrors() Errors { + return Errors([]error{ + errors.New("1"), + errors.New("2"), + errors.New("3"), + errors.New("4"), + errors.New("5"), + }) +}