//go:build !appengine // +build !appengine package xxhash import ( "os/exec" "sort" "strings" "testing" ) func TestStringAllocs(t *testing.T) { longStr := strings.Repeat("a", 1000) t.Run("Sum64String", func(t *testing.T) { testAllocs(t, func() { sink = Sum64String(longStr) }) }) t.Run("Digest.WriteString", func(t *testing.T) { testAllocs(t, func() { d := New() d.WriteString(longStr) sink = d.Sum64() }) }) } // This test is inspired by the Go runtime tests in https://go.dev/cl/57410. // It asserts that certain important functions may be inlined. func TestInlining(t *testing.T) { funcs := map[string]struct{}{ "Sum64String": {}, "(*Digest).WriteString": {}, } cmd := exec.Command("go", "test", "-gcflags=-m", "-run", "xxxx") out, err := cmd.CombinedOutput() if err != nil { t.Log(string(out)) t.Fatal(err) } for _, line := range strings.Split(string(out), "\n") { parts := strings.Split(line, ": can inline") if len(parts) < 2 { continue } delete(funcs, strings.TrimSpace(parts[1])) } var failed []string for fn := range funcs { failed = append(failed, fn) } sort.Strings(failed) for _, fn := range failed { t.Errorf("function %s not inlined", fn) } }