mirror of https://go.googlesource.com/go
75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
// Copyright 2022 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 slog
|
|
|
|
import (
|
|
"internal/testenv"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestAttrNoAlloc(t *testing.T) {
|
|
testenv.SkipIfOptimizationOff(t)
|
|
// Assign values just to make sure the compiler doesn't optimize away the statements.
|
|
var (
|
|
i int64
|
|
u uint64
|
|
f float64
|
|
b bool
|
|
s string
|
|
x any
|
|
p = &i
|
|
d time.Duration
|
|
)
|
|
a := int(testing.AllocsPerRun(5, func() {
|
|
i = Int64("key", 1).Value.Int64()
|
|
u = Uint64("key", 1).Value.Uint64()
|
|
f = Float64("key", 1).Value.Float64()
|
|
b = Bool("key", true).Value.Bool()
|
|
s = String("key", "foo").Value.String()
|
|
d = Duration("key", d).Value.Duration()
|
|
x = Any("key", p).Value.Any()
|
|
}))
|
|
if a != 0 {
|
|
t.Errorf("got %d allocs, want zero", a)
|
|
}
|
|
_ = u
|
|
_ = f
|
|
_ = b
|
|
_ = s
|
|
_ = x
|
|
}
|
|
|
|
func BenchmarkAttrString(b *testing.B) {
|
|
var (
|
|
is string
|
|
u string
|
|
f string
|
|
bn string
|
|
s string
|
|
x string
|
|
ds string
|
|
p = &is
|
|
d time.Duration
|
|
)
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
is = Int64("key", 1).String()
|
|
u = Uint64("key", 1).String()
|
|
f = Float64("key", 1).String()
|
|
bn = Bool("key", true).String()
|
|
s = String("key", "foo").String()
|
|
ds = Duration("key", d).String()
|
|
x = Any("key", p).String()
|
|
}
|
|
_ = u
|
|
_ = f
|
|
_ = bn
|
|
_ = s
|
|
_ = x
|
|
_ = ds
|
|
_ = p
|
|
}
|