...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package benchmarks
16
17 import (
18 "os"
19 "path/filepath"
20 "testing"
21
22 "cuelang.org/go/cue"
23 "cuelang.org/go/internal/core/eval"
24 "cuelang.org/go/internal/core/runtime"
25 "cuelang.org/go/internal/cuetest"
26 "cuelang.org/go/internal/cuetxtar"
27 "golang.org/x/tools/txtar"
28 )
29
30 func Benchmark(b *testing.B) {
31 entries, err := os.ReadDir(".")
32 if err != nil {
33 b.Fatal(err)
34 }
35
36 for _, entry := range entries {
37 name := entry.Name()
38 if entry.IsDir() || filepath.Ext(name) != ".txtar" {
39 continue
40 }
41
42 a, err := txtar.ParseFile(name)
43 if err != nil {
44 b.Fatal(err)
45 }
46
47 inst := cuetxtar.Load(a, b.TempDir())[0]
48 if inst.Err != nil {
49 b.Fatal(inst.Err)
50 }
51
52 r := runtime.New()
53
54 v, err := r.Build(nil, inst)
55 if err != nil {
56 b.Fatal(err)
57 }
58 e := eval.New(r)
59 ctx := e.NewContext(v)
60 v.Finalize(ctx)
61
62 if cuetest.UpdateGoldenFiles {
63 const statsFile = "stats.txt"
64 var stats txtar.File
65 var statsPos int
66 for i, f := range a.Files {
67 if f.Name == statsFile {
68 stats = f
69 statsPos = i
70 break
71 }
72 }
73 if stats.Name == "" {
74
75 a.Files = append([]txtar.File{{
76 Name: statsFile,
77 }}, a.Files...)
78 }
79
80 a.Files[statsPos].Data = []byte(ctx.Stats().String() + "\n\n")
81
82 info, err := entry.Info()
83 if err != nil {
84 b.Fatal(err)
85 }
86 os.WriteFile(name, txtar.Format(a), info.Mode())
87 }
88
89 b.Run(name, func(b *testing.B) {
90 b.ReportAllocs()
91 for i := 0; i < b.N; i++ {
92 inst := cue.Build(cuetxtar.Load(a, b.TempDir()))[0]
93 if inst.Err != nil {
94 b.Fatal(inst.Err)
95 }
96
97 inst.Value().Validate()
98 }
99 })
100 }
101 }
102
View as plain text