1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
package main
import (
"fmt"
"os"
"reflect"
"sort"
"strings"
"github.com/wader/gojq"
)
func main() {
cnt, err := os.ReadFile("builtin.jq")
if err != nil {
panic(err)
}
q, err := gojq.Parse(string(cnt))
if err != nil {
panic(err)
}
fds := make(map[string][]*gojq.FuncDef)
for _, fd := range q.FuncDefs {
fd.Minify()
fds[fd.Name] = append(fds[fd.Name], fd)
}
count := len(fds)
names, i := make([]string, count), 0
for n := range fds {
names[i] = n
i++
}
sort.Strings(names)
for _, n := range names {
var sb strings.Builder
for _, fd := range fds[n] {
fmt.Fprintf(&sb, "%s ", fd)
}
q, err := gojq.Parse(sb.String())
if err != nil {
panic(fmt.Sprintf("%s: %s", err, sb.String()))
}
for _, fd := range q.FuncDefs {
fd.Minify()
}
if !reflect.DeepEqual(q.FuncDefs, fds[n]) {
fmt.Printf("failed: %s: %s %s\n", n, q.FuncDefs, fds[n])
continue
}
fmt.Printf("ok: %s: %s\n", n, sb.String())
count--
}
if count > 0 {
os.Exit(1)
}
}
|