@@ -5,22 +5,83 @@ import (
5
5
"testing"
6
6
)
7
7
8
+ const (
9
+ ErrTolerance = 1e-6
10
+ )
11
+
12
+ func TestNormGaussAt (t * testing.T ) {
13
+ in := []float64 {
14
+ 0 ,
15
+ 1 ,
16
+ - 1 ,
17
+ 3.7 ,
18
+ - 3.7 ,
19
+ }
20
+
21
+ // These values were generated using dnorm on http://www.r-fiddle.org/
22
+ out := []float64 {
23
+ 0.3989422804 ,
24
+ 0.24197072452 ,
25
+ 0.24197072452 ,
26
+ 0.00042478027055 ,
27
+ 0.00042478027055 ,
28
+ }
29
+
30
+ for i , v := range in {
31
+ result := NormGaussAt (v )
32
+ if math .Abs (result - out [i ]) > ErrTolerance {
33
+ t .Error ("Expected" , out [i ], "got" , result , "for" , v )
34
+ }
35
+ }
36
+ }
37
+
38
+ func TestGaussAt (t * testing.T ) {
39
+ in := []float64 {
40
+ 20 ,
41
+ 25 ,
42
+ 15 ,
43
+ 38.5 ,
44
+ 1.5 ,
45
+ }
46
+
47
+ // These values were generated using dnorm on http://www.r-fiddle.org/
48
+ out := []float64 {
49
+ 0.07978845608 ,
50
+ 0.048394144904 ,
51
+ 0.048394144904 ,
52
+ 8.495605411e-5 ,
53
+ 8.495605411e-5 ,
54
+ }
55
+
56
+ for i , v := range in {
57
+ result := GaussAt (v , 20 , 5 )
58
+ if math .Abs (result - out [i ]) > ErrTolerance {
59
+ t .Error ("Expected" , out [i ], "got" , result , "for" , v )
60
+ }
61
+ }
62
+ }
63
+
8
64
func TestNormalCDF (t * testing.T ) {
9
65
in := []float64 {
10
66
math .Inf (1 ),
11
67
0 ,
12
68
math .Inf (- 1 ),
13
- InverseCDF (0.1 ),
14
- InverseCDF (0.9 ),
69
+ 1 ,
70
+ - 1 ,
71
+ 2 ,
72
+ - 2 ,
15
73
InverseCDF (0.86 ),
16
74
}
17
75
76
+ // These results were calculated using pnorm(x) on www.r-fiddle.org
18
77
out := []float64 {
19
78
1 ,
20
79
0.5 ,
21
80
0 ,
22
- 0.1 ,
23
- 0.9 ,
81
+ 0.841344746069 ,
82
+ 0.158655253931 ,
83
+ 0.977249868052 ,
84
+ 0.022750131948 ,
24
85
0.86 ,
25
86
}
26
87
@@ -31,7 +92,7 @@ func TestNormalCDF(t *testing.T) {
31
92
for i := range in {
32
93
o := NormalCDF (in [i ])
33
94
34
- if math .Abs (o - out [i ]) > errTolerance {
95
+ if math .Abs (o - out [i ]) > ErrTolerance {
35
96
t .Errorf ("NormalCDF(%f) == %f, want %f" , in [i ], o , out [i ])
36
97
}
37
98
}
@@ -42,17 +103,24 @@ func TestInverseCDF(t *testing.T) {
42
103
1 ,
43
104
0.5 ,
44
105
0 ,
45
- NormalCDF (1 ),
46
- NormalCDF (- 1 ),
106
+ 0.2 ,
107
+ 0.3 ,
108
+ 0.9 ,
109
+ - 1 ,
110
+ 2 ,
47
111
NormalCDF (4 ),
48
112
}
49
113
114
+ // These results were calculated using qnorm(x) on www.r-fiddle.org
50
115
out := []float64 {
51
116
math .Inf (1 ),
52
117
0 ,
53
118
math .Inf (- 1 ),
54
- 1 ,
55
- - 1 ,
119
+ - 0.84162123357 ,
120
+ - 0.52440051271 ,
121
+ 1.2815515655 ,
122
+ math .NaN (),
123
+ math .NaN (),
56
124
4 ,
57
125
}
58
126
@@ -63,7 +131,7 @@ func TestInverseCDF(t *testing.T) {
63
131
for i := range in {
64
132
o := InverseCDF (in [i ])
65
133
66
- if math .Abs (o - out [i ]) > errTolerance {
134
+ if math .Abs (o - out [i ]) > ErrTolerance {
67
135
t .Errorf ("InverseCDF(%f) == %f, want %f" , in [i ], o , out [i ])
68
136
}
69
137
}
0 commit comments