49 lines
907 B
Go
49 lines
907 B
Go
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package stats
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
type funnyCDF struct {
|
|
left float64
|
|
}
|
|
|
|
func (f funnyCDF) CDF(x float64) float64 {
|
|
switch {
|
|
case x < f.left:
|
|
return 0
|
|
case x < f.left+1:
|
|
return (x - f.left) / 2
|
|
case x < f.left+2:
|
|
return 0.5
|
|
case x < f.left+3:
|
|
return (x-f.left-2)/2 + 0.5
|
|
default:
|
|
return 1
|
|
}
|
|
}
|
|
|
|
func (f funnyCDF) Bounds() (float64, float64) {
|
|
return f.left, f.left + 3
|
|
}
|
|
|
|
func TestInvCDF(t *testing.T) {
|
|
for _, f := range []funnyCDF{funnyCDF{1}, funnyCDF{-1.5}, funnyCDF{-4}} {
|
|
testFunc(t, fmt.Sprintf("InvCDF(funnyCDF%+v)", f), InvCDF(f),
|
|
map[float64]float64{
|
|
-0.1: nan,
|
|
0: f.left,
|
|
0.25: f.left + 0.5,
|
|
0.5: f.left + 1,
|
|
0.75: f.left + 2.5,
|
|
1: f.left + 3,
|
|
1.1: nan,
|
|
})
|
|
}
|
|
}
|