}
}
-func BenchmarkScanFile(b *testing.B) {
- b.StopTimer()
- const filename = "scanner.go"
- src, err := os.ReadFile(filename)
- if err != nil {
- panic(err)
- }
- fset := token.NewFileSet()
- file := fset.AddFile(filename, fset.Base(), len(src))
- b.SetBytes(int64(len(src)))
- var s Scanner
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- s.Init(file, src, nil, ScanComments)
- for {
- _, tok, _ := s.Scan()
- if tok == token.EOF {
- break
+func BenchmarkScanFiles(b *testing.B) {
+ // Scan a few arbitrary large files, and one small one, to provide some
+ // variety in benchmarks.
+ for _, p := range []string{
+ "go/types/expr.go",
+ "go/parser/parser.go",
+ "net/http/server.go",
+ "go/scanner/errors.go",
+ } {
+ b.Run(p, func(b *testing.B) {
+ b.StopTimer()
+ filename := filepath.Join("..", "..", filepath.FromSlash(p))
+ src, err := os.ReadFile(filename)
+ if err != nil {
+ b.Fatal(err)
}
- }
+ fset := token.NewFileSet()
+ file := fset.AddFile(filename, fset.Base(), len(src))
+ b.SetBytes(int64(len(src)))
+ var s Scanner
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ s.Init(file, src, nil, ScanComments)
+ for {
+ _, tok, _ := s.Scan()
+ if tok == token.EOF {
+ break
+ }
+ }
+ }
+ })
}
}