wip
This commit is contained in:
94
internal/inst/x86csv_test.go
Normal file
94
internal/inst/x86csv_test.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package inst
|
||||
|
||||
import (
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
//go:generate curl --output testdata/x86.v0.2.csv https://raw.githubusercontent.com/golang/arch/master/x86/x86.v0.2.csv
|
||||
|
||||
const csvpath = "testdata/x86.v0.2.csv"
|
||||
|
||||
func LoadX86CSV(t *testing.T) []Instruction {
|
||||
t.Helper()
|
||||
f, err := os.Open(csvpath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
is, err := ReadFromX86CSV(f)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return is
|
||||
}
|
||||
|
||||
func TestExpandArg(t *testing.T) {
|
||||
cases := []struct {
|
||||
Arg string
|
||||
Types []string
|
||||
}{
|
||||
{"imm8", []string{"imm8"}},
|
||||
{"r/m32", []string{"r32", "m32"}},
|
||||
{"r16", []string{"r16"}},
|
||||
{"mm1", []string{"mm"}},
|
||||
{"xmm1", []string{"xmm"}},
|
||||
{"xmmV", []string{"xmm"}},
|
||||
{"xmm2/m128", []string{"xmm", "m128"}},
|
||||
{"xmm2/m64", []string{"xmm", "m64"}},
|
||||
{"ymm1", []string{"ymm"}},
|
||||
{"ymmV", []string{"ymm"}},
|
||||
{"ymm2/m256", []string{"ymm", "m256"}},
|
||||
}
|
||||
for _, c := range cases {
|
||||
types := expandArg(c.Arg)
|
||||
if !reflect.DeepEqual(c.Types, types) {
|
||||
t.Errorf("expanded %v to %s expected %s", c.Arg, types, c.Types)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestX86CSVOperandTypes(t *testing.T) {
|
||||
t.Skip("have not handled all cases yet")
|
||||
|
||||
is := LoadX86CSV(t)
|
||||
|
||||
types := map[string]bool{}
|
||||
for _, i := range is {
|
||||
for _, f := range i.Forms {
|
||||
for _, op := range f.Operands {
|
||||
types[op.Type] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for tipe := range types {
|
||||
if strings.Contains(tipe, "/") {
|
||||
t.Errorf("operand type %#v contains a slash (should be split)", tipe)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestCPUIDFlags helps catch any oddities in x86csv CPUID flags.
|
||||
func TestX86CSVCPUIDFlags(t *testing.T) {
|
||||
is := LoadX86CSV(t)
|
||||
|
||||
flags := map[string]bool{}
|
||||
for _, i := range is {
|
||||
for _, f := range i.Forms {
|
||||
for _, flag := range f.CPUID {
|
||||
flags[flag] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for flag := range flags {
|
||||
if strings.Contains(flag, " ") {
|
||||
t.Errorf("CPUID flag %#v contains whitespace", flag)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user