| //go:build go1.21 && !race |
| |
| package indenthandler |
| |
| import ( |
| "fmt" |
| "io" |
| "log/slog" |
| "strconv" |
| "testing" |
| ) |
| |
| func TestAlloc(t *testing.T) { |
| a := slog.String("key", "value") |
| t.Run("Appendf", func(t *testing.T) { |
| buf := make([]byte, 0, 100) |
| g := testing.AllocsPerRun(2, func() { |
| buf = fmt.Appendf(buf, "%s: %q\n", a.Key, a.Value.String()) |
| }) |
| if g, w := int(g), 2; g != w { |
| t.Errorf("got %d, want %d", g, w) |
| } |
| }) |
| t.Run("appends", func(t *testing.T) { |
| buf := make([]byte, 0, 100) |
| g := testing.AllocsPerRun(2, func() { |
| buf = append(buf, a.Key...) |
| buf = append(buf, ": "...) |
| buf = strconv.AppendQuote(buf, a.Value.String()) |
| buf = append(buf, '\n') |
| }) |
| if g, w := int(g), 0; g != w { |
| t.Errorf("got %d, want %d", g, w) |
| } |
| }) |
| |
| t.Run("Handle", func(t *testing.T) { |
| l := slog.New(New(io.Discard, nil)) |
| got := testing.AllocsPerRun(10, func() { |
| l.LogAttrs(nil, slog.LevelInfo, "hello", slog.String("a", "1")) |
| }) |
| if g, w := int(got), 6; g > w { |
| t.Errorf("got %d, want at most %d", g, w) |
| } |
| }) |
| } |