1
2
3
4
5 package main
6
7 import (
8 "bytes"
9 "errors"
10 "os"
11 "path/filepath"
12 "strings"
13 "testing"
14
15 "simd/archsimd/_gen/gentools"
16 "simd/archsimd/_gen/specdoc"
17 "simd/archsimd/_gen/specgen"
18 )
19
20
21
22 func TestFill(t *testing.T) {
23 goroot := gentools.DefaultGOROOT()
24 specDir := specgen.MustFindSpecDir(goroot)
25 specFuncs, err := specgen.Load(specDir, nil)
26 if err != nil {
27 t.Fatalf("loading spec: %v", err)
28 }
29 specIdx := specgen.NewIndex(specFuncs)
30
31 dirs := []string{
32 filepath.Join(goroot, "src/simd"),
33 filepath.Join(goroot, "src/simd/archsimd"),
34 }
35
36 for _, dir := range dirs {
37 entries, err := os.ReadDir(dir)
38 if err != nil {
39 t.Fatalf("reading %s: %v", dir, err)
40 }
41 for _, e := range entries {
42 if e.IsDir() || !strings.HasSuffix(e.Name(), ".go") || strings.HasSuffix(e.Name(), "_test.go") {
43 continue
44 }
45 filePath := filepath.Join(dir, e.Name())
46 relPath, err := filepath.Rel(goroot, filePath)
47 if err != nil {
48 relPath = filePath
49 }
50 src, err := os.ReadFile(filePath)
51 if err != nil {
52 t.Fatalf("reading %s: %v", relPath, err)
53 }
54
55 isGen, err := isGenerated(src)
56 if err != nil {
57 t.Fatalf("%s: %v", relPath, err)
58 }
59
60 filled, err := specdoc.Fill(src, specIdx, specdoc.Options{
61 Filename: filepath.ToSlash(relPath),
62
63
64
65 AllowDocRewrite: true,
66 })
67 var rep *specdoc.Report
68 if errors.As(err, &rep) {
69 t.Errorf("%s diverges from internal/spec:\n%s", relPath, rep)
70 } else if err != nil {
71 t.Errorf("checking %s: %v", relPath, err)
72 } else if !bytes.Equal(src, filled) {
73 diff := gentools.Diff(relPath, src, relPath, filled)
74 var fix string
75 if !isGen {
76 fix = "\tgo run ./cmd/specfill -w\n"
77 }
78 t.Errorf("%s diverges from internal/spec:\n%s\nTo fix:\n\tcd $GOROOT/src/simd/archsimd/_gen\n%s\tgo run . -w", relPath, diff, fix)
79 }
80 }
81 }
82 }
83
View as plain text