Files
avo/internal/api/function_test.go
Michael McLoughlin b985ff5775 ci: bump to go 1.23 (#453)
Upgrade to Go 1.23.

Upgrade also requires bumping `golangci-lint` to v1.62.2, and upgrading
third-party test versions for some failing cases.
2024-12-22 16:01:48 -08:00

50 lines
1.1 KiB
Go

package api
import (
"strings"
"testing"
"github.com/mmcloughlin/avo/internal/inst"
)
func TestFunctionsDuplicateFormSignatures(t *testing.T) {
// Test for duplicate form signatures within a given function. This could
// manifest as duplicate case statements in generated code.
fns := InstructionsFunctions(inst.Instructions)
for _, fn := range fns {
t.Run(fn.Name(), func(t *testing.T) {
seen := map[string]bool{}
for _, f := range fn.Forms {
sig := strings.Join(f.Signature(), "_")
t.Log(sig)
if seen[sig] {
t.Fatalf("duplicate: %s", sig)
}
seen[sig] = true
}
})
}
}
func TestFunctionsUniqueArgNames(t *testing.T) {
fns := InstructionsFunctions(inst.Instructions)
for _, fn := range fns {
s := fn.Signature()
for _, n := range fn.Arities() {
if n == 0 {
continue
}
names := map[string]bool{}
for j := range n {
names[s.ParameterName(j)] = true
}
if len(names) != n {
t.Errorf("repeated argument for instruction %s", fn.Name())
}
if _, found := names[""]; found {
t.Errorf("empty argument name for instruction %s", fn.Name())
}
}
}
}