blob: f53a9b56d0784906169e319c9161d255b47fc939 [file] [log] [blame]
 // Copyright 2018 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. package prog import ( "math/rand" "reflect" "testing" "github.com/google/go-cmp/cmp" ) func TestNormalizePrio(t *testing.T) { prios := [][]float32{ {2, 2, 2}, {1, 2, 4}, {1, 2, 0}, } want := [][]float32{ {1, 1, 1}, {0.1, 0.4, 1}, {0.4, 1, 0.1}, } t.Logf("had: %+v", prios) normalizePrio(prios) if !reflect.DeepEqual(prios, want) { t.Logf("got: %+v", prios) 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) } }