diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-02-21 10:08:07 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-02-21 10:08:34 +0100 |
| commit | 0278574b21dfafef43a38fba3c08a499bc870161 (patch) | |
| tree | 801894ac6fad519560db0f640660ec0f58f09b35 /prog | |
| parent | 3133098b17e01bcc352845e61538a9ed4deb1d98 (diff) | |
prog: add a test for ChoiceTable
Diffstat (limited to 'prog')
| -rw-r--r-- | prog/prio_test.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/prog/prio_test.go b/prog/prio_test.go index 06a72f75b..f53a9b56d 100644 --- a/prog/prio_test.go +++ b/prog/prio_test.go @@ -4,8 +4,11 @@ package prog import ( + "math/rand" "reflect" "testing" + + "github.com/google/go-cmp/cmp" ) func TestNormalizePrio(t *testing.T) { @@ -26,3 +29,33 @@ func TestNormalizePrio(t *testing.T) { t.Errorf("want: %+v", want) } } + +// TestPrioChoice tests that we select all syscalls with equal probability. +func TestPrioChoice(t *testing.T) { + t.Parallel() + target := &Target{ + Syscalls: []*Syscall{ + {ID: 0}, + {ID: 1}, + {ID: 2}, + {ID: 3}, + }, + } + prios := [][]float32{ + {1, 1, 1, 1}, + {1, 1, 1, 1}, + {1, 1, 1, 1}, + {1, 1, 1, 1}, + } + ct := target.BuildChoiceTable(prios, nil) + r := rand.New(rand.NewSource(0)) + var res [4]int + for i := 0; i < 10000; i++ { + res[ct.Choose(r, 0)]++ + } + // If this fails too frequently we can do some ranges, but for now it's just hardcoded. + want := [4]int{2552, 2459, 2491, 2498} + if diff := cmp.Diff(res, want); diff != "" { + t.Fatal(diff) + } +} |
