package addrgen import ( "math" "testing" ) const testArraySize = 100 const testIterCount = 100000 func TestPortSimple(t *testing.T) { g := must(ParsePortRangeSpec("443")) for i := 0; i < 100; i++ { if p := g.Port(); p != 443 { t.Errorf("unexpected port value: %d", p) } } } func TestPortRange(t *testing.T) { var arr [testArraySize]int g := must(ParsePortRangeSpec("10000-20000")) for i := 0; i < testIterCount; i++ { p := g.Port() arr[p%testArraySize]++ } sum := 0 for i := 0; i < testArraySize; i++ { sum += int(arr[i]) } if sum != testIterCount { t.Errorf("unexpected sum: %d", sum) } mx := float64(testIterCount) / float64(testArraySize) sigmaSquared := mx * float64(testArraySize-1) / float64(testArraySize) sigma := math.Sqrt(sigmaSquared) t.Logf("sigma = %.3f", sigma) t.Logf("5*sigma = %.3f", 5*sigma) for i := 0; i < testArraySize; i++ { if math.Abs(float64(arr[i])-mx) > 5*sigma { t.Errorf("arr[%d]=%d too far from mx=%.3f", i, arr[i], mx) } } }