@@ -25,6 +25,8 @@ var tape = require( 'tape' );
25
25
var tryRequire = require ( '@stdlib/utils/try-require' ) ;
26
26
var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
27
27
var abs = require ( '@stdlib/math/base/special/abs' ) ;
28
+ var PINF = require ( '@stdlib/constants/float64/pinf' ) ;
29
+ var NINF = require ( '@stdlib/constants/float64/ninf' ) ;
28
30
var EPS = require ( '@stdlib/constants/float64/eps' ) ;
29
31
30
32
@@ -60,19 +62,55 @@ tape( 'if provided `NaN` for any parameter, the function returns `NaN`', opts, f
60
62
t . end ( ) ;
61
63
} ) ;
62
64
63
- tape ( 'if provided `v <= 0`, the function returns `NaN`' , opts , function test ( t ) {
65
+ tape ( 'if provided `Infinity` for `x` and a finite `v`, the function returns `-Infinity`' , opts , function test ( t ) {
66
+ var y = logpdf ( PINF , 1.0 ) ;
67
+ t . equal ( y , NINF , 'returns -Infinity' ) ;
68
+ t . end ( ) ;
69
+ } ) ;
70
+
71
+ tape ( 'if provided `-Infinity` for `x` and a finite `v`, the function returns `-Infinity`' , opts , function test ( t ) {
72
+ var y = logpdf ( NINF , 1.0 ) ;
73
+ t . equal ( y , NINF , 'returns -Infinity' ) ;
74
+ t . end ( ) ;
75
+ } ) ;
76
+
77
+ tape ( 'if provided `Infinity` for `v`, the function returns `NaN`' , opts , function test ( t ) {
64
78
var y ;
65
79
80
+ y = logpdf ( 0.0 , PINF ) ;
81
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
82
+
83
+ y = logpdf ( NaN , PINF ) ;
84
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
85
+
86
+ y = logpdf ( PINF , PINF ) ;
87
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
88
+
89
+ y = logpdf ( NINF , PINF ) ;
90
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
91
+
92
+ t . end ( ) ;
93
+ } ) ;
94
+
95
+ tape ( 'if provided a nonpositive `v`, the function always returns `NaN`' , opts , function test ( t ) {
96
+ var y ;
97
+
98
+ y = logpdf ( 2.0 , 0.0 ) ;
99
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
100
+
101
+ y = logpdf ( 2.0 , - 1.0 ) ;
102
+ t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
103
+
66
104
y = logpdf ( 0.0 , - 1.0 ) ;
67
105
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
68
106
69
- y = logpdf ( 0 .0, 0.0 ) ;
107
+ y = logpdf ( 2 .0, NINF ) ;
70
108
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
71
109
72
110
t . end ( ) ;
73
111
} ) ;
74
112
75
- tape ( 'the function evaluates the logpdf for `x` given a large range of `v ` and `x` ' , opts , function test ( t ) {
113
+ tape ( 'the function evaluates the logpdf for `x` given parameter `v` (when `x ` and `v` are small) ' , opts , function test ( t ) {
76
114
var expected ;
77
115
var delta ;
78
116
var tol ;
@@ -81,26 +119,23 @@ tape( 'the function evaluates the logpdf for `x` given a large range of `v` and
81
119
var y ;
82
120
var i ;
83
121
84
- expected = largeLarge . expected ;
85
- x = largeLarge . x ;
86
- v = largeLarge . v ;
122
+ expected = smallSmall . expected ;
123
+ x = smallSmall . x ;
124
+ v = smallSmall . v ;
87
125
for ( i = 0 ; i < x . length ; i ++ ) {
88
- y = logpdf ( x [ i ] , v [ i ] ) ;
89
- if ( y === expected [ i ] ) {
90
- t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + ', v: ' + v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
126
+ y = logpdf ( x [ i ] , v [ i ] ) ;
127
+ if ( y === expected [ i ] ) {
128
+ t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + '. v: '+ v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
91
129
} else {
92
130
delta = abs ( y - expected [ i ] ) ;
93
- tol = 2.0 * EPS * abs ( expected [ i ] ) ;
94
- if ( tol < 1e-14 ) {
95
- tol = 1e-14 ; // Set a minimum tolerance
96
- }
97
- t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
131
+ tol = 10.0 * EPS * abs ( expected [ i ] ) ;
132
+ t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
98
133
}
99
134
}
100
135
t . end ( ) ;
101
136
} ) ;
102
137
103
- tape ( 'the function evaluates the logpdf for `x` given a large range of `v` and small range of `x` ' , opts , function test ( t ) {
138
+ tape ( 'the function evaluates the logpdf for `x` given parameter `v` (when `x` is large and `v` small) ' , opts , function test ( t ) {
104
139
var expected ;
105
140
var delta ;
106
141
var tol ;
@@ -113,22 +148,19 @@ tape( 'the function evaluates the logpdf for `x` given a large range of `v` and
113
148
x = largeSmall . x ;
114
149
v = largeSmall . v ;
115
150
for ( i = 0 ; i < x . length ; i ++ ) {
116
- y = logpdf ( x [ i ] , v [ i ] ) ;
117
- if ( y === expected [ i ] ) {
118
- t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + ', v: ' + v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
151
+ y = logpdf ( x [ i ] , v [ i ] ) ;
152
+ if ( y === expected [ i ] ) {
153
+ t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + '. v: '+ v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
119
154
} else {
120
155
delta = abs ( y - expected [ i ] ) ;
121
- tol = 2.0 * EPS * abs ( expected [ i ] ) ;
122
- if ( tol < 1e-14 ) {
123
- tol = 1e-14 ; // Set a minimum tolerance
124
- }
125
- t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
156
+ tol = 10.0 * EPS * abs ( expected [ i ] ) ;
157
+ t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
126
158
}
127
159
}
128
160
t . end ( ) ;
129
161
} ) ;
130
162
131
- tape ( 'the function evaluates the logpdf for `x` given a small range of `v` and large range of `x` ' , opts , function test ( t ) {
163
+ tape ( 'the function evaluates the logpdf for `x` given parameter `v` (when `x` is small and `v` large) ' , opts , function test ( t ) {
132
164
var expected ;
133
165
var delta ;
134
166
var tol ;
@@ -141,22 +173,19 @@ tape( 'the function evaluates the logpdf for `x` given a small range of `v` and
141
173
x = smallLarge . x ;
142
174
v = smallLarge . v ;
143
175
for ( i = 0 ; i < x . length ; i ++ ) {
144
- y = logpdf ( x [ i ] , v [ i ] ) ;
145
- if ( y === expected [ i ] ) {
146
- t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + ', v: ' + v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
176
+ y = logpdf ( x [ i ] , v [ i ] ) ;
177
+ if ( y === expected [ i ] ) {
178
+ t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + '. v: '+ v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
147
179
} else {
148
180
delta = abs ( y - expected [ i ] ) ;
149
- tol = 2.0 * EPS * abs ( expected [ i ] ) ;
150
- if ( tol < 1e-14 ) {
151
- tol = 1e-14 ; // Set a minimum tolerance
152
- }
153
- t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
181
+ tol = 50.0 * EPS * abs ( expected [ i ] ) ;
182
+ t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
154
183
}
155
184
}
156
185
t . end ( ) ;
157
186
} ) ;
158
187
159
- tape ( 'the function evaluates the logpdf for `x` given a small range of `v ` and `x` ' , opts , function test ( t ) {
188
+ tape ( 'the function evaluates the logpdf for `x` given parameter `v` (when `x ` and `v` are large) ' , opts , function test ( t ) {
160
189
var expected ;
161
190
var delta ;
162
191
var tol ;
@@ -165,20 +194,17 @@ tape( 'the function evaluates the logpdf for `x` given a small range of `v` and
165
194
var y ;
166
195
var i ;
167
196
168
- expected = smallSmall . expected ;
169
- x = smallSmall . x ;
170
- v = smallSmall . v ;
197
+ expected = largeLarge . expected ;
198
+ x = largeLarge . x ;
199
+ v = largeLarge . v ;
171
200
for ( i = 0 ; i < x . length ; i ++ ) {
172
- y = logpdf ( x [ i ] , v [ i ] ) ;
173
- if ( y === expected [ i ] ) {
174
- t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + ', v: ' + v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
201
+ y = logpdf ( x [ i ] , v [ i ] ) ;
202
+ if ( y === expected [ i ] ) {
203
+ t . equal ( y , expected [ i ] , 'x: ' + x [ i ] + '. v: '+ v [ i ] + ', y: ' + y + ', expected: ' + expected [ i ] ) ;
175
204
} else {
176
205
delta = abs ( y - expected [ i ] ) ;
177
- tol = 2.0 * EPS * abs ( expected [ i ] ) ;
178
- if ( tol < 1e-14 ) {
179
- tol = 1e-14 ; // Set a minimum tolerance
180
- }
181
- t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
206
+ tol = 40.0 * EPS * abs ( expected [ i ] ) ;
207
+ t . ok ( delta <= tol , 'within tolerance. x: ' + x [ i ] + '. v: ' + v [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
182
208
}
183
209
}
184
210
t . end ( ) ;
0 commit comments