2121// MODULES //
2222
2323var bench = require ( '@stdlib/bench' ) ;
24+ var Float64Array = require ( '@stdlib/array/float64' ) ;
2425var uniform = require ( '@stdlib/random/base/uniform' ) ;
2526var discreteUniform = require ( '@stdlib/random/base/discrete-uniform' ) ;
2627var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
@@ -33,13 +34,19 @@ var Bernoulli = require( './../lib' );
3334
3435bench ( pkg + '::instantiation' , function benchmark ( b ) {
3536 var dist ;
37+ var len ;
3638 var p ;
3739 var i ;
3840
41+ len = 100 ;
42+ p = new Float64Array ( len ) ;
43+ for ( i = 0 ; i < len ; i ++ ) {
44+ p [ i ] = uniform ( 0.0 , 1.0 ) ;
45+ }
46+
3947 b . tic ( ) ;
4048 for ( i = 0 ; i < b . iterations ; i ++ ) {
41- p = uniform ( 0.0 , 1.0 ) ;
42- dist = new Bernoulli ( p ) ;
49+ dist = new Bernoulli ( p [ i % len ] ) ;
4350 if ( ! ( dist instanceof Bernoulli ) ) {
4451 b . fail ( 'should return a distribution instance' ) ;
4552 }
@@ -78,18 +85,23 @@ bench( pkg+'::get:p', function benchmark( b ) {
7885
7986bench ( pkg + '::set:p' , function benchmark ( b ) {
8087 var dist ;
88+ var len ;
8189 var p ;
8290 var y ;
8391 var i ;
8492
8593 p = 0.54 ;
8694 dist = new Bernoulli ( p ) ;
95+ len = 100 ;
96+ y = new Float64Array ( len ) ;
97+ for ( i = 0 ; i < len ; i ++ ) {
98+ y [ i ] = uniform ( 0.0 , 1.0 ) ;
99+ }
87100
88101 b . tic ( ) ;
89102 for ( i = 0 ; i < b . iterations ; i ++ ) {
90- y = uniform ( 0.0 , 1.0 ) ;
91- dist . p = y ;
92- if ( dist . p !== y ) {
103+ dist . p = y [ i % len ] ;
104+ if ( dist . p !== y [ i % len ] ) {
93105 b . fail ( 'should return set value' ) ;
94106 }
95107 }
@@ -103,16 +115,23 @@ bench( pkg+'::set:p', function benchmark( b ) {
103115
104116bench ( pkg + ':entropy' , function benchmark ( b ) {
105117 var dist ;
118+ var len ;
119+ var x ;
106120 var p ;
107121 var y ;
108122 var i ;
109123
110124 p = 0.54 ;
111125 dist = new Bernoulli ( p ) ;
126+ len = 100 ;
127+ x = new Float64Array ( len ) ;
128+ for ( i = 0 ; i < len ; i ++ ) {
129+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
130+ }
112131
113132 b . tic ( ) ;
114133 for ( i = 0 ; i < b . iterations ; i ++ ) {
115- dist . p = uniform ( 0.0 , 1.0 ) ;
134+ dist . p = x [ i % len ] ;
116135 y = dist . entropy ;
117136 if ( isnan ( y ) ) {
118137 b . fail ( 'should not return NaN' ) ;
@@ -128,16 +147,23 @@ bench( pkg+':entropy', function benchmark( b ) {
128147
129148bench ( pkg + ':kurtosis' , function benchmark ( b ) {
130149 var dist ;
150+ var len ;
151+ var x ;
131152 var p ;
132153 var y ;
133154 var i ;
134155
135156 p = 0.54 ;
136157 dist = new Bernoulli ( p ) ;
158+ len = 100 ;
159+ x = new Float64Array ( len ) ;
160+ for ( i = 0 ; i < len ; i ++ ) {
161+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
162+ }
137163
138164 b . tic ( ) ;
139165 for ( i = 0 ; i < b . iterations ; i ++ ) {
140- dist . p = uniform ( 0.0 , 1.0 ) ;
166+ dist . p = x [ i % len ] ;
141167 y = dist . kurtosis ;
142168 if ( isnan ( y ) ) {
143169 b . fail ( 'should not return NaN' ) ;
@@ -153,16 +179,23 @@ bench( pkg+':kurtosis', function benchmark( b ) {
153179
154180bench ( pkg + ':mean' , function benchmark ( b ) {
155181 var dist ;
182+ var len ;
183+ var x ;
156184 var p ;
157185 var y ;
158186 var i ;
159187
160188 p = 0.54 ;
161189 dist = new Bernoulli ( p ) ;
190+ len = 100 ;
191+ x = new Float64Array ( len ) ;
192+ for ( i = 0 ; i < len ; i ++ ) {
193+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
194+ }
162195
163196 b . tic ( ) ;
164197 for ( i = 0 ; i < b . iterations ; i ++ ) {
165- dist . p = uniform ( 0.0 , 1.0 ) ;
198+ dist . p = x [ i % len ] ;
166199 y = dist . mean ;
167200 if ( isnan ( y ) ) {
168201 b . fail ( 'should not return NaN' ) ;
@@ -178,16 +211,23 @@ bench( pkg+':mean', function benchmark( b ) {
178211
179212bench ( pkg + ':median' , function benchmark ( b ) {
180213 var dist ;
214+ var len ;
215+ var x ;
181216 var p ;
182217 var y ;
183218 var i ;
184219
185220 p = 0.54 ;
186221 dist = new Bernoulli ( p ) ;
222+ len = 100 ;
223+ x = new Float64Array ( len ) ;
224+ for ( i = 0 ; i < len ; i ++ ) {
225+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
226+ }
187227
188228 b . tic ( ) ;
189229 for ( i = 0 ; i < b . iterations ; i ++ ) {
190- dist . p = uniform ( 0.0 , 1.0 ) ;
230+ dist . p = x [ i % len ] ;
191231 y = dist . median ;
192232 if ( isnan ( y ) ) {
193233 b . fail ( 'should not return NaN' ) ;
@@ -203,16 +243,23 @@ bench( pkg+':median', function benchmark( b ) {
203243
204244bench ( pkg + ':skewness' , function benchmark ( b ) {
205245 var dist ;
246+ var len ;
247+ var x ;
206248 var p ;
207249 var y ;
208250 var i ;
209251
210252 p = 0.54 ;
211253 dist = new Bernoulli ( p ) ;
254+ len = 100 ;
255+ x = new Float64Array ( len ) ;
256+ for ( i = 0 ; i < len ; i ++ ) {
257+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
258+ }
212259
213260 b . tic ( ) ;
214261 for ( i = 0 ; i < b . iterations ; i ++ ) {
215- dist . p = uniform ( 0.0 , 1.0 ) ;
262+ dist . p = x [ i % len ] ;
216263 y = dist . skewness ;
217264 if ( isnan ( y ) ) {
218265 b . fail ( 'should not return NaN' ) ;
@@ -228,16 +275,23 @@ bench( pkg+':skewness', function benchmark( b ) {
228275
229276bench ( pkg + ':stdev' , function benchmark ( b ) {
230277 var dist ;
278+ var len ;
279+ var x ;
231280 var p ;
232281 var y ;
233282 var i ;
234283
235284 p = 0.54 ;
236285 dist = new Bernoulli ( p ) ;
286+ len = 100 ;
287+ x = new Float64Array ( len ) ;
288+ for ( i = 0 ; i < len ; i ++ ) {
289+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
290+ }
237291
238292 b . tic ( ) ;
239293 for ( i = 0 ; i < b . iterations ; i ++ ) {
240- dist . p = uniform ( 0.0 , 1.0 ) ;
294+ dist . p = x [ i % len ] ;
241295 y = dist . stdev ;
242296 if ( isnan ( y ) ) {
243297 b . fail ( 'should not return NaN' ) ;
@@ -253,16 +307,23 @@ bench( pkg+':stdev', function benchmark( b ) {
253307
254308bench ( pkg + ':variance' , function benchmark ( b ) {
255309 var dist ;
310+ var len ;
311+ var x ;
256312 var p ;
257313 var y ;
258314 var i ;
259315
260316 p = 0.54 ;
261317 dist = new Bernoulli ( p ) ;
318+ len = 100 ;
319+ x = new Float64Array ( len ) ;
320+ for ( i = 0 ; i < len ; i ++ ) {
321+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
322+ }
262323
263324 b . tic ( ) ;
264325 for ( i = 0 ; i < b . iterations ; i ++ ) {
265- dist . p = uniform ( 0.0 , 1.0 ) ;
326+ dist . p = x [ i % len ] ;
266327 y = dist . variance ;
267328 if ( isnan ( y ) ) {
268329 b . fail ( 'should not return NaN' ) ;
@@ -278,18 +339,23 @@ bench( pkg+':variance', function benchmark( b ) {
278339
279340bench ( pkg + ':cdf' , function benchmark ( b ) {
280341 var dist ;
342+ var len ;
281343 var p ;
282344 var x ;
283345 var y ;
284346 var i ;
285347
286348 p = 0.54 ;
287349 dist = new Bernoulli ( p ) ;
350+ len = 100 ;
351+ x = new Float64Array ( len ) ;
352+ for ( i = 0 ; i < len ; i ++ ) {
353+ x [ i ] = uniform ( 0.0 , 6.0 ) ;
354+ }
288355
289356 b . tic ( ) ;
290357 for ( i = 0 ; i < b . iterations ; i ++ ) {
291- x = uniform ( 0.0 , 6.0 ) ;
292- y = dist . cdf ( x ) ;
358+ y = dist . cdf ( x [ i % len ] ) ;
293359 if ( isnan ( y ) ) {
294360 b . fail ( 'should not return NaN' ) ;
295361 }
@@ -304,18 +370,23 @@ bench( pkg+':cdf', function benchmark( b ) {
304370
305371bench ( pkg + ':mgf' , function benchmark ( b ) {
306372 var dist ;
373+ var len ;
307374 var p ;
308375 var x ;
309376 var y ;
310377 var i ;
311378
312379 p = 0.54 ;
313380 dist = new Bernoulli ( p ) ;
381+ len = 100 ;
382+ x = new Float64Array ( len ) ;
383+ for ( i = 0 ; i < len ; i ++ ) {
384+ x [ i ] = uniform ( 0.0 , - ln ( 1.0 - p ) ) ;
385+ }
314386
315387 b . tic ( ) ;
316388 for ( i = 0 ; i < b . iterations ; i ++ ) {
317- x = uniform ( 0.0 , - ln ( 1.0 - p ) ) ;
318- y = dist . mgf ( x ) ;
389+ y = dist . mgf ( x [ i % len ] ) ;
319390 if ( isnan ( y ) ) {
320391 b . fail ( 'should not return NaN' ) ;
321392 }
@@ -330,18 +401,23 @@ bench( pkg+':mgf', function benchmark( b ) {
330401
331402bench ( pkg + ':pmf' , function benchmark ( b ) {
332403 var dist ;
404+ var len ;
333405 var p ;
334406 var x ;
335407 var y ;
336408 var i ;
337409
338410 p = 0.54 ;
339411 dist = new Bernoulli ( p ) ;
412+ len = 100 ;
413+ x = new Float64Array ( len ) ;
414+ for ( i = 0 ; i < len ; i ++ ) {
415+ x [ i ] = discreteUniform ( 0 , 8 ) ;
416+ }
340417
341418 b . tic ( ) ;
342419 for ( i = 0 ; i < b . iterations ; i ++ ) {
343- x = discreteUniform ( 0 , 8 ) ;
344- y = dist . pmf ( x ) ;
420+ y = dist . pmf ( x [ i % len ] ) ;
345421 if ( isnan ( y ) ) {
346422 b . fail ( 'should not return NaN' ) ;
347423 }
@@ -356,18 +432,23 @@ bench( pkg+':pmf', function benchmark( b ) {
356432
357433bench ( pkg + ':quantile' , function benchmark ( b ) {
358434 var dist ;
435+ var len ;
359436 var p ;
360437 var x ;
361438 var y ;
362439 var i ;
363440
364441 p = 0.54 ;
365442 dist = new Bernoulli ( p ) ;
443+ len = 100 ;
444+ x = new Float64Array ( len ) ;
445+ for ( i = 0 ; i < len ; i ++ ) {
446+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
447+ }
366448
367449 b . tic ( ) ;
368450 for ( i = 0 ; i < b . iterations ; i ++ ) {
369- x = uniform ( 0.0 , 1.0 ) ;
370- y = dist . quantile ( x ) ;
451+ y = dist . quantile ( x [ i % len ] ) ;
371452 if ( isnan ( y ) ) {
372453 b . fail ( 'should not return NaN' ) ;
373454 }
0 commit comments