21
21
// MODULES //
22
22
23
23
var bench = require ( '@stdlib/bench' ) ;
24
- var randu = require ( '@stdlib/random/base/randu' ) ;
24
+ var Float64Array = require ( '@stdlib/array/float64' ) ;
25
+ var uniform = require ( '@stdlib/random/base/uniform' ) ;
25
26
var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
26
27
var EPS = require ( '@stdlib/constants/float64/eps' ) ;
27
28
var pkg = require ( './../package.json' ) . name ;
@@ -32,15 +33,22 @@ var Levy = require( './../lib' );
32
33
33
34
bench ( pkg + '::instantiation' , function benchmark ( b ) {
34
35
var dist ;
36
+ var len ;
35
37
var mu ;
36
38
var c ;
37
39
var i ;
38
40
41
+ len = 100 ;
42
+ mu = new Float64Array ( len ) ;
43
+ c = new Float64Array ( len ) ;
44
+ for ( i = 0 ; i < len ; i ++ ) {
45
+ mu [ i ] = uniform ( EPS , 10.0 ) ;
46
+ c [ i ] = uniform ( EPS , 10.0 ) ;
47
+ }
48
+
39
49
b . tic ( ) ;
40
50
for ( i = 0 ; i < b . iterations ; i ++ ) {
41
- mu = ( randu ( ) * 10.0 ) + EPS ;
42
- c = ( randu ( ) * 10.0 ) + EPS ;
43
- dist = new Levy ( mu , c ) ;
51
+ dist = new Levy ( mu [ i % len ] , c [ i % len ] ) ;
44
52
if ( ! ( dist instanceof Levy ) ) {
45
53
b . fail ( 'should return a distribution instance' ) ;
46
54
}
@@ -81,20 +89,25 @@ bench( pkg+'::get:mu', function benchmark( b ) {
81
89
82
90
bench ( pkg + '::set:mu' , function benchmark ( b ) {
83
91
var dist ;
92
+ var len ;
84
93
var mu ;
85
94
var c ;
86
95
var y ;
87
96
var i ;
88
97
89
98
mu = 2.0 ;
90
99
c = 3.0 ;
100
+ len = 100 ;
101
+ y = new Float64Array ( len ) ;
91
102
dist = new Levy ( mu , c ) ;
103
+ for ( i = 0 ; i < len ; i ++ ) {
104
+ y [ i ] = uniform ( EPS , 100.0 ) ;
105
+ }
92
106
93
107
b . tic ( ) ;
94
108
for ( i = 0 ; i < b . iterations ; i ++ ) {
95
- y = ( 100.0 * randu ( ) ) + EPS ;
96
- dist . mu = y ;
97
- if ( dist . mu !== y ) {
109
+ dist . mu = y [ i % len ] ;
110
+ if ( dist . mu !== y [ i % len ] ) {
98
111
b . fail ( 'should return set value' ) ;
99
112
}
100
113
}
@@ -134,20 +147,25 @@ bench( pkg+'::get:c', function benchmark( b ) {
134
147
135
148
bench ( pkg + '::set:c' , function benchmark ( b ) {
136
149
var dist ;
150
+ var len ;
137
151
var mu ;
138
152
var c ;
139
153
var y ;
140
154
var i ;
141
155
142
156
mu = 2.0 ;
143
157
c = 3.0 ;
158
+ len = 100 ;
144
159
dist = new Levy ( mu , c ) ;
160
+ y = new Float64Array ( len ) ;
161
+ for ( i = 0 ; i < len ; i ++ ) {
162
+ y [ i ] = uniform ( EPS , 100.0 ) ;
163
+ }
145
164
146
165
b . tic ( ) ;
147
166
for ( i = 0 ; i < b . iterations ; i ++ ) {
148
- y = ( 100.0 * randu ( ) ) + EPS ;
149
- dist . c = y ;
150
- if ( dist . c !== y ) {
167
+ dist . c = y [ i % len ] ;
168
+ if ( dist . c !== y [ i % len ] ) {
151
169
b . fail ( 'should return set value' ) ;
152
170
}
153
171
}
@@ -161,18 +179,25 @@ bench( pkg+'::set:c', function benchmark( b ) {
161
179
162
180
bench ( pkg + ':entropy' , function benchmark ( b ) {
163
181
var dist ;
182
+ var len ;
164
183
var mu ;
184
+ var x ;
165
185
var c ;
166
186
var y ;
167
187
var i ;
168
188
169
189
mu = 2.0 ;
170
190
c = 3.0 ;
191
+ len = 100 ;
192
+ x = new Float64Array ( len ) ;
171
193
dist = new Levy ( mu , c ) ;
194
+ for ( i = 0 ; i < len ; i ++ ) {
195
+ x [ i ] = uniform ( EPS , 100.0 ) ;
196
+ }
172
197
173
198
b . tic ( ) ;
174
199
for ( i = 0 ; i < b . iterations ; i ++ ) {
175
- dist . mu = ( 100.0 * randu ( ) ) + EPS ;
200
+ dist . mu = x [ i % len ] ;
176
201
y = dist . entropy ;
177
202
if ( isnan ( y ) ) {
178
203
b . fail ( 'should not return NaN' ) ;
@@ -188,18 +213,25 @@ bench( pkg+':entropy', function benchmark( b ) {
188
213
189
214
bench ( pkg + ':mean' , function benchmark ( b ) {
190
215
var dist ;
216
+ var len ;
191
217
var mu ;
192
218
var c ;
219
+ var x ;
193
220
var y ;
194
221
var i ;
195
222
196
223
mu = 2.0 ;
197
224
c = 3.0 ;
225
+ len = 100 ;
226
+ x = new Float64Array ( len ) ;
198
227
dist = new Levy ( mu , c ) ;
228
+ for ( i = 0 ; i < len ; i ++ ) {
229
+ x [ i ] = uniform ( EPS , 100.0 ) ;
230
+ }
199
231
200
232
b . tic ( ) ;
201
233
for ( i = 0 ; i < b . iterations ; i ++ ) {
202
- dist . mu = ( 100.0 * randu ( ) ) + EPS ;
234
+ dist . mu = x [ i % len ] ;
203
235
y = dist . mean ;
204
236
if ( isnan ( y ) ) {
205
237
b . fail ( 'should not return NaN' ) ;
@@ -215,18 +247,25 @@ bench( pkg+':mean', function benchmark( b ) {
215
247
216
248
bench ( pkg + ':median' , function benchmark ( b ) {
217
249
var dist ;
250
+ var len ;
218
251
var mu ;
219
252
var c ;
253
+ var x ;
220
254
var y ;
221
255
var i ;
222
256
223
257
mu = 2.0 ;
224
258
c = 3.0 ;
225
259
dist = new Levy ( mu , c ) ;
260
+ len = 100 ;
261
+ x = new Float64Array ( len ) ;
262
+ for ( i = 0 ; i < len ; i ++ ) {
263
+ x [ i ] = uniform ( EPS , 100.0 ) ;
264
+ }
226
265
227
266
b . tic ( ) ;
228
267
for ( i = 0 ; i < b . iterations ; i ++ ) {
229
- dist . mu = ( 100.0 * randu ( ) ) + EPS ;
268
+ dist . mu = x [ i % len ] ;
230
269
y = dist . median ;
231
270
if ( isnan ( y ) ) {
232
271
b . fail ( 'should not return NaN' ) ;
@@ -242,18 +281,25 @@ bench( pkg+':median', function benchmark( b ) {
242
281
243
282
bench ( pkg + ':mode' , function benchmark ( b ) {
244
283
var dist ;
284
+ var len ;
245
285
var mu ;
246
286
var c ;
287
+ var x ;
247
288
var y ;
248
289
var i ;
249
290
250
291
mu = 2.0 ;
251
292
c = 3.0 ;
293
+ len = 100 ;
294
+ x = new Float64Array ( len ) ;
252
295
dist = new Levy ( mu , c ) ;
296
+ for ( i = 0 ; i < len ; i ++ ) {
297
+ x [ i ] = uniform ( 1.0 + EPS , 100.0 ) ;
298
+ }
253
299
254
300
b . tic ( ) ;
255
301
for ( i = 0 ; i < b . iterations ; i ++ ) {
256
- dist . mu = ( 100.0 * randu ( ) ) + 1.0 + EPS ;
302
+ dist . mu = x [ i % len ] ;
257
303
y = dist . mode ;
258
304
if ( isnan ( y ) ) {
259
305
b . fail ( 'should not return NaN' ) ;
@@ -269,18 +315,24 @@ bench( pkg+':mode', function benchmark( b ) {
269
315
270
316
bench ( pkg + ':stdev' , function benchmark ( b ) {
271
317
var dist ;
318
+ var len ;
272
319
var mu ;
273
320
var c ;
321
+ var x ;
274
322
var y ;
275
323
var i ;
276
324
277
325
mu = 2.0 ;
278
326
c = 3.0 ;
327
+ len = 100 ;
328
+ x = new Float64Array ( len ) ;
279
329
dist = new Levy ( mu , c ) ;
280
-
330
+ for ( i = 0 ; i < len ; i ++ ) {
331
+ x [ i ] = uniform ( EPS , 100.0 ) ;
332
+ }
281
333
b . tic ( ) ;
282
334
for ( i = 0 ; i < b . iterations ; i ++ ) {
283
- dist . mu = ( 100.0 * randu ( ) ) + EPS ;
335
+ dist . mu = x [ i % len ] ;
284
336
y = dist . stdev ;
285
337
if ( isnan ( y ) ) {
286
338
b . fail ( 'should not return NaN' ) ;
@@ -296,18 +348,25 @@ bench( pkg+':stdev', function benchmark( b ) {
296
348
297
349
bench ( pkg + ':variance' , function benchmark ( b ) {
298
350
var dist ;
351
+ var len ;
299
352
var mu ;
300
353
var c ;
354
+ var x ;
301
355
var y ;
302
356
var i ;
303
357
304
358
mu = 2.0 ;
305
359
c = 3.0 ;
360
+ len = 100 ;
361
+ x = new Float64Array ( len ) ;
306
362
dist = new Levy ( mu , c ) ;
363
+ for ( i = 0 ; i < len ; i ++ ) {
364
+ x [ i ] = uniform ( EPS , 100.0 ) ;
365
+ }
307
366
308
367
b . tic ( ) ;
309
368
for ( i = 0 ; i < b . iterations ; i ++ ) {
310
- dist . mu = ( 100.0 * randu ( ) ) + EPS ;
369
+ dist . mu = x [ i % len ] ;
311
370
y = dist . variance ;
312
371
if ( isnan ( y ) ) {
313
372
b . fail ( 'should not return NaN' ) ;
@@ -323,6 +382,7 @@ bench( pkg+':variance', function benchmark( b ) {
323
382
324
383
bench ( pkg + ':cdf' , function benchmark ( b ) {
325
384
var dist ;
385
+ var len ;
326
386
var mu ;
327
387
var c ;
328
388
var x ;
@@ -331,12 +391,16 @@ bench( pkg+':cdf', function benchmark( b ) {
331
391
332
392
mu = 2.0 ;
333
393
c = 3.0 ;
394
+ len = 100 ;
395
+ x = new Float64Array ( len ) ;
334
396
dist = new Levy ( mu , c ) ;
397
+ for ( i = 0 ; i < len ; i ++ ) {
398
+ x [ i ] = uniform ( - 3.0 , 6.0 ) ;
399
+ }
335
400
336
401
b . tic ( ) ;
337
402
for ( i = 0 ; i < b . iterations ; i ++ ) {
338
- x = ( randu ( ) * 6.0 ) - 3.0 ;
339
- y = dist . cdf ( x ) ;
403
+ y = dist . cdf ( x [ i % len ] ) ;
340
404
if ( isnan ( y ) ) {
341
405
b . fail ( 'should not return NaN' ) ;
342
406
}
@@ -351,6 +415,7 @@ bench( pkg+':cdf', function benchmark( b ) {
351
415
352
416
bench ( pkg + ':logpdf' , function benchmark ( b ) {
353
417
var dist ;
418
+ var len ;
354
419
var mu ;
355
420
var c ;
356
421
var x ;
@@ -359,12 +424,16 @@ bench( pkg+':logpdf', function benchmark( b ) {
359
424
360
425
mu = 1.0 ;
361
426
c = 2.0 ;
427
+ len = 100 ;
428
+ x = new Float64Array ( len ) ;
362
429
dist = new Levy ( mu , c ) ;
430
+ for ( i = 0 ; i < len ; i ++ ) {
431
+ x [ i ] = uniform ( - 3.0 , 6.0 ) ;
432
+ }
363
433
364
434
b . tic ( ) ;
365
435
for ( i = 0 ; i < b . iterations ; i ++ ) {
366
- x = ( randu ( ) * 6.0 ) - 3.0 ;
367
- y = dist . logpdf ( x ) ;
436
+ y = dist . logpdf ( x [ i % len ] ) ;
368
437
if ( isnan ( y ) ) {
369
438
b . fail ( 'should not return NaN' ) ;
370
439
}
@@ -379,6 +448,7 @@ bench( pkg+':logpdf', function benchmark( b ) {
379
448
380
449
bench ( pkg + ':pdf' , function benchmark ( b ) {
381
450
var dist ;
451
+ var len ;
382
452
var mu ;
383
453
var c ;
384
454
var x ;
@@ -387,12 +457,16 @@ bench( pkg+':pdf', function benchmark( b ) {
387
457
388
458
mu = 2.0 ;
389
459
c = 3.0 ;
460
+ len = 100 ;
461
+ x = new Float64Array ( len ) ;
390
462
dist = new Levy ( mu , c ) ;
463
+ for ( i = 0 ; i < len ; i ++ ) {
464
+ x [ i ] = uniform ( - 3.0 , 6.0 ) ;
465
+ }
391
466
392
467
b . tic ( ) ;
393
468
for ( i = 0 ; i < b . iterations ; i ++ ) {
394
- x = ( randu ( ) * 6.0 ) - 3.0 ;
395
- y = dist . pdf ( x ) ;
469
+ y = dist . pdf ( x [ i % len ] ) ;
396
470
if ( isnan ( y ) ) {
397
471
b . fail ( 'should not return NaN' ) ;
398
472
}
@@ -407,6 +481,7 @@ bench( pkg+':pdf', function benchmark( b ) {
407
481
408
482
bench ( pkg + ':quantile' , function benchmark ( b ) {
409
483
var dist ;
484
+ var len ;
410
485
var mu ;
411
486
var c ;
412
487
var x ;
@@ -415,12 +490,16 @@ bench( pkg+':quantile', function benchmark( b ) {
415
490
416
491
mu = 2.0 ;
417
492
c = 3.0 ;
493
+ len = 100 ;
494
+ x = new Float64Array ( len ) ;
418
495
dist = new Levy ( mu , c ) ;
496
+ for ( i = 0 ; i < len ; i ++ ) {
497
+ x [ i ] = uniform ( 0.0 , 1.0 ) ;
498
+ }
419
499
420
500
b . tic ( ) ;
421
501
for ( i = 0 ; i < b . iterations ; i ++ ) {
422
- x = randu ( ) ;
423
- y = dist . quantile ( x ) ;
502
+ y = dist . quantile ( x [ i % len ] ) ;
424
503
if ( isnan ( y ) ) {
425
504
b . fail ( 'should not return NaN' ) ;
426
505
}
0 commit comments