diff options
Diffstat (limited to 'prog/prog_test.go')
| -rw-r--r-- | prog/prog_test.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/prog/prog_test.go b/prog/prog_test.go index a1bd4b83c..5c7cc4664 100644 --- a/prog/prog_test.go +++ b/prog/prog_test.go @@ -175,3 +175,31 @@ func testCrossArchProg(t *testing.T, p *Prog, crossTargets []*Target) { crossTarget.OS, crossTarget.Arch, err, serialized) } } + +func TestSpecialStructs(t *testing.T) { + testEachTargetRandom(t, func(t *testing.T, target *Target, rs rand.Source, iters int) { + for special, gen := range target.SpecialTypes { + t.Run(special, func(t *testing.T) { + var typ Type + for i := 0; i < len(target.Syscalls) && typ == nil; i++ { + ForeachType(target.Syscalls[i], func(t Type) { + if s, ok := t.(*StructType); ok && s.Name() == special { + typ = s + } + if s, ok := t.(*UnionType); ok && s.Name() == special { + typ = s + } + }) + } + if typ == nil { + t.Fatal("can't find struct description") + } + g := &Gen{newRand(target, rs), newState(target, nil)} + for i := 0; i < iters/len(target.SpecialTypes); i++ { + arg, _ := gen(g, typ, nil) + gen(g, typ, arg) + } + }) + } + }) +} |
