23
23
var tape = require ( 'tape' ) ;
24
24
var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
25
25
var abs = require ( '@stdlib/math/base/special/abs' ) ;
26
+ var exp = require ( '@stdlib/math/base/special/exp' ) ;
27
+ var PINF = require ( '@stdlib/constants/float64/pinf' ) ;
28
+ var NINF = require ( '@stdlib/constants/float64/ninf' ) ;
26
29
var EPS = require ( '@stdlib/constants/float64/eps' ) ;
27
30
var mgf = require ( './../lib' ) ;
28
31
29
32
30
33
// FIXTURES //
31
34
32
- var small = require ( './fixtures/julia/small.json' ) ;
33
- var medium = require ( './fixtures/julia/medium.json' ) ;
34
- var large = require ( './fixtures/julia/large.json' ) ;
35
+ var smallRange = require ( './fixtures/julia/small.json' ) ;
36
+ var mediumRange = require ( './fixtures/julia/medium.json' ) ;
37
+ var largeRange = require ( './fixtures/julia/large.json' ) ;
35
38
36
39
37
40
// TESTS //
@@ -43,101 +46,107 @@ tape( 'main export is a function', function test( t ) {
43
46
} ) ;
44
47
45
48
tape ( 'if provided `NaN` for any parameter, the function returns `NaN`' , function test ( t ) {
46
- var y = mgf ( NaN , 1.0 ) ;
49
+ var y = mgf ( NaN , 0.5 ) ;
47
50
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
48
51
y = mgf ( 0.0 , NaN ) ;
49
52
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
50
53
t . end ( ) ;
51
54
} ) ;
52
55
53
- tape ( 'if provided a nonpositive `lambda`, the function always returns `NaN`' , function test ( t ) {
56
+ tape ( 'if provided `lambda <= 0 `, the function returns `NaN`' , function test ( t ) {
54
57
var y ;
55
58
56
59
y = mgf ( 2.0 , - 1.0 ) ;
57
60
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
58
61
59
- y = mgf ( 0 .0, - 1 .0 ) ;
62
+ y = mgf ( 2 .0, 0 .0 ) ;
60
63
t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
61
64
62
- y = mgf ( 0.0 , 0.0 ) ;
63
- t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
65
+ t . end ( ) ;
66
+ } ) ;
64
67
65
- y = mgf ( - 2.0 , 0.0 ) ;
66
- t . equal ( isnan ( y ) , true , 'returns NaN' ) ;
68
+ tape ( 'if provided `+infinity` for `t` and a valid `lambda`, the function returns `+infinity`' , function test ( t ) {
69
+ var y = mgf ( PINF , 0.5 ) ;
70
+ t . equal ( y , PINF , 'returns +infinity' ) ;
71
+ t . end ( ) ;
72
+ } ) ;
67
73
74
+ tape ( 'if provided `-infinity` for `t` and a valid `lambda`, the function returns `exp(-lambda)`' , function test ( t ) {
75
+ var y = mgf ( NINF , 0.5 ) ;
76
+ t . equal ( y , exp ( - 0.5 ) , 'returns exp(-lambda)' ) ;
68
77
t . end ( ) ;
69
78
} ) ;
70
79
71
- tape ( 'the function evaluates the mgf for `x ` given small `lambda` values ' , function test ( t ) {
80
+ tape ( 'the function evaluates the mgf for `t ` given a small range `lambda`' , function test ( t ) {
72
81
var expected ;
73
82
var lambda ;
83
+ var values ;
74
84
var delta ;
75
85
var tol ;
76
- var x ;
77
86
var y ;
78
87
var i ;
79
88
80
- expected = small . expected ;
81
- x = small . x ;
82
- lambda = small . lambda ;
83
- for ( i = 0 ; i < x . length ; i ++ ) {
84
- y = mgf ( x [ i ] , lambda [ i ] ) ;
85
- if ( y === expected [ i ] ) {
86
- t . equal ( y , expected [ i ] , 'x : ' + x [ i ] + '. λ : '+ lambda [ i ] + '. y: '+ y + '. E : '+ expected [ i ] ) ;
89
+ expected = smallRange . expected ;
90
+ values = smallRange . x ;
91
+ lambda = smallRange . lambda ;
92
+ for ( i = 0 ; i < values . length ; i ++ ) {
93
+ y = mgf ( values [ i ] , lambda [ i ] ) ;
94
+ if ( y === expected [ i ] ) {
95
+ t . equal ( y , expected [ i ] , 't : ' + values [ i ] + ', lambda : ' + lambda [ i ] + ', y: ' + y + ', expected : ' + expected [ i ] ) ;
87
96
} else {
88
- delta = abs ( y - expected [ i ] ) ;
89
- tol = EPS * abs ( expected [ i ] ) ;
90
- t . ok ( delta <= tol , 'within tolerance. x : ' + x [ i ] + '. λ : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
97
+ delta = abs ( y - expected [ i ] ) ;
98
+ tol = 1.0 * EPS * abs ( expected [ i ] ) ;
99
+ t . ok ( delta <= tol , 'within tolerance. t : ' + values [ i ] + '. lambda : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
91
100
}
92
101
}
93
102
t . end ( ) ;
94
103
} ) ;
95
104
96
- tape ( 'the function evaluates the mgf for `x ` given medium `lambda` values ' , function test ( t ) {
105
+ tape ( 'the function evaluates the mgf for `t ` given a medium range `lambda`' , function test ( t ) {
97
106
var expected ;
98
107
var lambda ;
108
+ var values ;
99
109
var delta ;
100
110
var tol ;
101
- var x ;
102
111
var y ;
103
112
var i ;
104
113
105
- expected = medium . expected ;
106
- x = medium . x ;
107
- lambda = medium . lambda ;
108
- for ( i = 0 ; i < x . length ; i ++ ) {
109
- y = mgf ( x [ i ] , lambda [ i ] ) ;
110
- if ( y === expected [ i ] ) {
111
- t . equal ( y , expected [ i ] , 'x : ' + x [ i ] + '. λ : '+ lambda [ i ] + '. y: '+ y + '. E : '+ expected [ i ] ) ;
114
+ expected = mediumRange . expected ;
115
+ values = mediumRange . x ;
116
+ lambda = mediumRange . lambda ;
117
+ for ( i = 0 ; i < values . length ; i ++ ) {
118
+ y = mgf ( values [ i ] , lambda [ i ] ) ;
119
+ if ( y === expected [ i ] ) {
120
+ t . equal ( y , expected [ i ] , 't : ' + values [ i ] + ', lambda : ' + lambda [ i ] + ', y: ' + y + ', expected : ' + expected [ i ] ) ;
112
121
} else {
113
- delta = abs ( y - expected [ i ] ) ;
114
- tol = EPS * abs ( expected [ i ] ) ;
115
- t . ok ( delta <= tol , 'within tolerance. x : ' + x [ i ] + '. λ : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
122
+ delta = abs ( y - expected [ i ] ) ;
123
+ tol = 1.0 * EPS * abs ( expected [ i ] ) ;
124
+ t . ok ( delta <= tol , 'within tolerance. t : ' + values [ i ] + '. lambda : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
116
125
}
117
126
}
118
127
t . end ( ) ;
119
128
} ) ;
120
129
121
- tape ( 'the function evaluates the mgf for `x ` given large `lambda` values ' , function test ( t ) {
130
+ tape ( 'the function evaluates the mgf for `t ` given a large range `lambda`' , function test ( t ) {
122
131
var expected ;
132
+ var values ;
123
133
var lambda ;
124
134
var delta ;
125
135
var tol ;
126
- var x ;
127
136
var y ;
128
137
var i ;
129
138
130
- expected = large . expected ;
131
- x = large . x ;
132
- lambda = large . lambda ;
133
- for ( i = 0 ; i < x . length ; i ++ ) {
134
- y = mgf ( x [ i ] , lambda [ i ] ) ;
135
- if ( y === expected [ i ] ) {
136
- t . equal ( y , expected [ i ] , 'x : ' + x [ i ] + '. λ : '+ lambda [ i ] + '. y: '+ y + '. E : '+ expected [ i ] ) ;
139
+ expected = largeRange . expected ;
140
+ values = largeRange . x ;
141
+ lambda = largeRange . lambda ;
142
+ for ( i = 0 ; i < values . length ; i ++ ) {
143
+ y = mgf ( values [ i ] , lambda [ i ] ) ;
144
+ if ( y === expected [ i ] ) {
145
+ t . equal ( y , expected [ i ] , 't : ' + values [ i ] + ', lambda : ' + lambda [ i ] + ', y: ' + y + ', expected : ' + expected [ i ] ) ;
137
146
} else {
138
- delta = abs ( y - expected [ i ] ) ;
139
- tol = EPS * abs ( expected [ i ] ) ;
140
- t . ok ( delta <= tol , 'within tolerance. x : ' + x [ i ] + '. λ : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
147
+ delta = abs ( y - expected [ i ] ) ;
148
+ tol = 1.0 * EPS * abs ( expected [ i ] ) ;
149
+ t . ok ( delta <= tol , 'within tolerance. t : ' + values [ i ] + '. lambda : ' + lambda [ i ] + '. y: ' + y + '. E: ' + expected [ i ] + '. Δ: ' + delta + '. tol: ' + tol + '.' ) ;
141
150
}
142
151
}
143
152
t . end ( ) ;
0 commit comments