| // 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 benchproc |
| |
| import ( |
| "testing" |
| |
| "golang.org/x/perf/benchfmt" |
| ) |
| |
| func checkNameExtractor(t *testing.T, x extractor, fullName string, want string) { |
| t.Helper() |
| res := &benchfmt.Result{Name: benchfmt.Name(fullName)} |
| got := string(x(res)) |
| if got != want { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| } |
| |
| func TestExtractName(t *testing.T) { |
| check := checkNameExtractor |
| |
| x, err := newExtractor(".name") |
| if err != nil { |
| t.Fatal(err) |
| } |
| check(t, x, "Test", "Test") |
| check(t, x, "Test/a", "Test") |
| check(t, x, "Test-4", "Test") |
| check(t, x, "Test/a-4", "Test") |
| } |
| |
| func TestExtractFullName(t *testing.T) { |
| check := checkNameExtractor |
| |
| t.Run("basic", func(t *testing.T) { |
| x, err := newExtractor(".fullname") |
| if err != nil { |
| t.Fatal(err) |
| } |
| check(t, x, "Test", "Test") |
| check(t, x, "Test/a=123", "Test/a=123") |
| check(t, x, "Test-2", "Test-2") |
| }) |
| |
| t.Run("excludeA", func(t *testing.T) { |
| x := newExtractorFullName([]string{"/a"}) |
| check(t, x, "Test", "Test") |
| check(t, x, "Test/a=123", "Test") |
| check(t, x, "Test/b=123/a=123", "Test/b=123") |
| check(t, x, "Test/a=123/b=123", "Test/b=123") |
| check(t, x, "Test/a=123/a=123", "Test") |
| check(t, x, "Test/a=123-2", "Test-2") |
| }) |
| |
| t.Run("excludeName", func(t *testing.T) { |
| x := newExtractorFullName([]string{".name"}) |
| check(t, x, "Test", "*") |
| check(t, x, "Test/a=123", "*/a=123") |
| x = newExtractorFullName([]string{".name", "/a"}) |
| check(t, x, "Test", "*") |
| check(t, x, "Test/a=123", "*") |
| check(t, x, "Test/a=123/b=123", "*/b=123") |
| }) |
| |
| t.Run("excludeGomaxprocs", func(t *testing.T) { |
| x := newExtractorFullName([]string{"/gomaxprocs"}) |
| check(t, x, "Test", "Test") |
| check(t, x, "Test/a=123", "Test/a=123") |
| check(t, x, "Test/a=123-2", "Test/a=123") |
| check(t, x, "Test/gomaxprocs=123", "Test") |
| }) |
| } |
| |
| func TestExtractNameKey(t *testing.T) { |
| check := checkNameExtractor |
| |
| t.Run("basic", func(t *testing.T) { |
| x, err := newExtractor("/a") |
| if err != nil { |
| t.Fatal(err) |
| } |
| check(t, x, "Test", "") |
| check(t, x, "Test/a=1", "1") |
| check(t, x, "Test/aa=1", "") |
| check(t, x, "Test/a=1/b=2", "1") |
| check(t, x, "Test/b=1/a=2", "2") |
| check(t, x, "Test/b=1/a=2-4", "2") |
| }) |
| |
| t.Run("gomaxprocs", func(t *testing.T) { |
| x, err := newExtractor("/gomaxprocs") |
| if err != nil { |
| t.Fatal(err) |
| } |
| check(t, x, "Test", "") |
| check(t, x, "Test/gomaxprocs=4", "4") |
| check(t, x, "Test-4", "4") |
| check(t, x, "Test/a-4", "4") |
| }) |
| } |
| |
| func TestExtractFileKey(t *testing.T) { |
| x, err := newExtractor("file-key") |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| res := r(t, "Name", "file-key", "123", "other-key", "456") |
| got := string(x(res)) |
| want := "123" |
| if got != want { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| |
| res = r(t, "Name", "other-key", "456") |
| got = string(x(res)) |
| want = "" |
| if got != want { |
| t.Errorf("got %s, want %s", got, want) |
| } |
| } |
| |
| func TestExtractBadKey(t *testing.T) { |
| check := func(t *testing.T, got error, want string) { |
| t.Helper() |
| if got == nil || got.Error() != want { |
| t.Errorf("got error %s, want error %s", got, want) |
| } |
| } |
| _, err := newExtractor("") |
| check(t, err, "key must not be empty") |
| } |