Signed biased distribution generator

This commit is contained in:
Ian Gulliver
2021-11-20 16:56:07 -10:00
parent c12a546447
commit 56f61545ce
2 changed files with 51 additions and 1 deletions

View File

@@ -31,3 +31,39 @@ func TestRandBiasedUint64(t *testing.T) {
t.Fatalf("Variance greater than allowed: %d > %d (max=%d min=%d)", max - min, max / 10, max, min)
}
}
func TestRandBiasedInt64(t *testing.T) {
// [0,62]: positive
// [63,63]: zero
// [64,126]: negative
buckets := [127]uint64{}
for i := 0; i < 1000000; i++ {
val := gen.RandBiasedInt64()
switch {
case val == 0:
buckets[63]++
case val < 0:
buckets[63 + bits.Len64(uint64(val * -1))]++
case val > 0:
buckets[63 - bits.Len64(uint64(val))]++
}
}
var max uint64 = 0
var min uint64 = math.MaxUint64
for _, count := range buckets {
if count > max {
max = count
}
if count < min {
min = count
}
}
if max - min > max / 10 {
t.Fatalf("Variance greater than allowed: %d > %d (max=%d min=%d)", max - min, max / 10, max, min)
}
}