Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools / gopls@v0.5.2 / internal / regtest / bench_test.go
1 // Copyright 2020 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package regtest
6
7 import (
8         "flag"
9         "fmt"
10         "testing"
11
12         "golang.org/x/tools/internal/lsp/protocol"
13 )
14
15 func printBenchmarkResults(result testing.BenchmarkResult) {
16         fmt.Println("Benchmark Statistics:")
17         fmt.Println(result.String())
18         fmt.Println(result.MemString())
19 }
20
21 var iwlOptions struct {
22         workdir string
23 }
24
25 func init() {
26         flag.StringVar(&iwlOptions.workdir, "iwl_workdir", "", "if set, run IWL benchmark in this directory")
27 }
28
29 func TestBenchmarkIWL(t *testing.T) {
30         if iwlOptions.workdir == "" {
31                 t.Skip("-iwl_workdir not configured")
32         }
33
34         opts := stressTestOptions(iwlOptions.workdir)
35         // Don't skip hooks, so that we can wait for IWL.
36         opts = append(opts, SkipHooks(false))
37
38         results := testing.Benchmark(func(b *testing.B) {
39                 for i := 0; i < b.N; i++ {
40                         withOptions(opts...).run(t, "", func(t *testing.T, env *Env) {})
41                 }
42         })
43
44         printBenchmarkResults(results)
45 }
46
47 var symbolOptions struct {
48         workdir, query, matcher, style string
49         printResults                   bool
50 }
51
52 func init() {
53         flag.StringVar(&symbolOptions.workdir, "symbol_workdir", "", "if set, run symbol benchmark in this directory")
54         flag.StringVar(&symbolOptions.query, "symbol_query", "test", "symbol query to use in benchmark")
55         flag.StringVar(&symbolOptions.matcher, "symbol_matcher", "", "symbol matcher to use in benchmark")
56         flag.StringVar(&symbolOptions.style, "symbol_style", "", "symbol style to use in benchmark")
57         flag.BoolVar(&symbolOptions.printResults, "symbol_print_results", false, "whether to print symbol query results")
58 }
59
60 func TestBenchmarkSymbols(t *testing.T) {
61         if symbolOptions.workdir == "" {
62                 t.Skip("-symbol_workdir not configured")
63         }
64
65         opts := stressTestOptions(symbolOptions.workdir)
66         conf := EditorConfig{}
67         if symbolOptions.matcher != "" {
68                 conf.SymbolMatcher = &symbolOptions.matcher
69         }
70         if symbolOptions.style != "" {
71                 conf.SymbolStyle = &symbolOptions.style
72         }
73         opts = append(opts, conf)
74
75         withOptions(opts...).run(t, "", func(t *testing.T, env *Env) {
76                 // We can't Await in this test, since we have disabled hooks. Instead, run
77                 // one symbol request to completion to ensure all necessary cache entries
78                 // are populated.
79                 symbols, err := env.Editor.Server.Symbol(env.Ctx, &protocol.WorkspaceSymbolParams{
80                         Query: symbolOptions.query,
81                 })
82                 if err != nil {
83                         t.Fatal(err)
84                 }
85
86                 if symbolOptions.printResults {
87                         fmt.Println("Results:")
88                         for i := 0; i < len(symbols); i++ {
89                                 fmt.Printf("\t%d. %s (%s)\n", i, symbols[i].Name, symbols[i].ContainerName)
90                         }
91                 }
92
93                 results := testing.Benchmark(func(b *testing.B) {
94                         for i := 0; i < b.N; i++ {
95                                 if _, err := env.Editor.Server.Symbol(env.Ctx, &protocol.WorkspaceSymbolParams{
96                                         Query: symbolOptions.query,
97                                 }); err != nil {
98                                         t.Fatal(err)
99                                 }
100                         }
101                 })
102                 printBenchmarkResults(results)
103         })
104 }