aboutsummaryrefslogtreecommitdiffstats
path: root/prog/prog_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'prog/prog_test.go')
-rw-r--r--prog/prog_test.go28
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)
+ }
+ })
+ }
+ })
+}