2121// MODULES //
2222
2323var bench = require ( '@stdlib/bench' ) ;
24- var randu = require ( '@stdlib/random/base/randu' ) ;
25- var floor = require ( './../../../../base/special/floor' ) ;
24+ var discreteUniform = require ( '@stdlib/random/array/discrete-uniform' ) ;
2625var round = require ( './../../../../base/special/round' ) ;
2726var sqrt = require ( './../../../../base/special/sqrt' ) ;
2827var pow = require ( './../../../../base/special/pow' ) ;
28+ var zeros = require ( '@stdlib/array/base/zeros' ) ;
2929var isnan = require ( './../../../../base/assert/is-nan' ) ;
3030var PHI = require ( '@stdlib/constants/float64/phi' ) ;
3131var pkg = require ( './../package.json' ) . name ;
@@ -45,10 +45,11 @@ bench( pkg, function benchmark( b ) {
4545 var y ;
4646 var i ;
4747
48+ x = discreteUniform ( 100 , 0 , 78 ) ;
49+
4850 b . tic ( ) ;
4951 for ( i = 0 ; i < b . iterations ; i ++ ) {
50- x = floor ( randu ( ) * 79.0 ) ;
51- y = fibonacci ( x ) ;
52+ y = fibonacci ( x [ i % x . length ] ) ;
5253 if ( isnan ( y ) ) {
5354 b . fail ( 'should not return NaN' ) ;
5455 }
@@ -70,10 +71,11 @@ bench( pkg+'::analytic', function benchmark( b ) {
7071 return round ( pow ( PHI , n ) / SQRT_5 ) ;
7172 }
7273
74+ x = discreteUniform ( 100 , 0 , 78 ) ;
75+
7376 b . tic ( ) ;
7477 for ( i = 0 ; i < b . iterations ; i ++ ) {
75- x = floor ( randu ( ) * 79.0 ) ;
76- y = fibonacci ( x ) ;
78+ y = fibonacci ( x [ i % x . length ] ) ;
7779 if ( isnan ( y ) ) {
7880 b . fail ( 'should not return NaN' ) ;
7981 }
@@ -91,10 +93,11 @@ bench( pkg+'::table', function benchmark( b ) {
9193 var y ;
9294 var i ;
9395
96+ x = discreteUniform ( 100 , 0 , 78 ) ;
97+
9498 b . tic ( ) ;
9599 for ( i = 0 ; i < b . iterations ; i ++ ) {
96- x = floor ( randu ( ) * 79.0 ) ;
97- y = FIBONACCI [ x ] ;
100+ y = FIBONACCI [ x [ i % x . length ] ] ;
98101 if ( isnan ( y ) ) {
99102 b . fail ( 'should not return NaN' ) ;
100103 }
@@ -119,10 +122,11 @@ bench( pkg+'::naive_recursion', function benchmark( b ) {
119122 return fibonacci ( n - 1 ) + fibonacci ( n - 2 ) ;
120123 }
121124
125+ x = discreteUniform ( 100 , 0 , 40 ) ; // limit upper bound
126+
122127 b . tic ( ) ;
123128 for ( i = 0 ; i < b . iterations ; i ++ ) {
124- x = floor ( randu ( ) * 40.0 ) ; // limit upper bound
125- y = fibonacci ( x ) ;
129+ y = fibonacci ( x [ i % x . length ] ) ;
126130 if ( isnan ( y ) ) {
127131 b . fail ( 'should not return NaN' ) ;
128132 }
@@ -142,7 +146,7 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
142146 var y ;
143147 var i ;
144148
145- arr = new Array ( 79 ) ;
149+ arr = zeros ( 79 ) ;
146150 arr [ 0 ] = 0 ;
147151 arr [ 1 ] = 1 ;
148152 arr [ 2 ] = 1 ;
@@ -156,10 +160,11 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
156160 return arr [ n ] ;
157161 }
158162
163+ x = discreteUniform ( 100 , 0 , 40 ) ; // limit upper bound
164+
159165 b . tic ( ) ;
160166 for ( i = 0 ; i < b . iterations ; i ++ ) {
161- x = floor ( randu ( ) * 40.0 ) ; // limit upper bound
162- y = fibonacci ( x ) ;
167+ y = fibonacci ( x [ i % x . length ] ) ;
163168 if ( isnan ( y ) ) {
164169 b . fail ( 'should not return NaN' ) ;
165170 }
@@ -181,7 +186,7 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
181186 var arr ;
182187 var i ;
183188
184- arr = new Array ( n + 1 ) ;
189+ arr = zeros ( n + 1 ) ;
185190 arr [ 0 ] = 0 ;
186191 arr [ 1 ] = 1 ;
187192 arr [ 2 ] = 1 ;
@@ -191,10 +196,11 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
191196 return arr [ n ] ;
192197 }
193198
199+ x = discreteUniform ( 100 , 0 , 78 ) ;
200+
194201 b . tic ( ) ;
195202 for ( i = 0 ; i < b . iterations ; i ++ ) {
196- x = floor ( randu ( ) * 79.0 ) ;
197- y = fibonacci ( x ) ;
203+ y = fibonacci ( x [ i % x . length ] ) ;
198204 if ( isnan ( y ) ) {
199205 b . fail ( 'should not return NaN' ) ;
200206 }
@@ -228,10 +234,11 @@ bench( pkg+'::iterative', function benchmark( b ) {
228234 return b ;
229235 }
230236
237+ x = discreteUniform ( 100 , 0 , 78 ) ;
238+
231239 b . tic ( ) ;
232240 for ( i = 0 ; i < b . iterations ; i ++ ) {
233- x = floor ( randu ( ) * 79.0 ) ;
234- y = fibonacci ( x ) ;
241+ y = fibonacci ( x [ i % x . length ] ) ;
235242 if ( isnan ( y ) ) {
236243 b . fail ( 'should not return NaN' ) ;
237244 }
@@ -251,7 +258,7 @@ bench( pkg+'::iterative_memoized', function benchmark( b ) {
251258 var y ;
252259 var i ;
253260
254- arr = new Array ( 79 ) ;
261+ arr = zeros ( 79 ) ;
255262 arr [ 0 ] = 0 ;
256263 arr [ 1 ] = 1 ;
257264 arr [ 2 ] = 1 ;
@@ -268,10 +275,11 @@ bench( pkg+'::iterative_memoized', function benchmark( b ) {
268275 return arr [ n ] ;
269276 }
270277
278+ x = discreteUniform ( 100 , 0 , 78 ) ;
279+
271280 b . tic ( ) ;
272281 for ( i = 0 ; i < b . iterations ; i ++ ) {
273- x = floor ( randu ( ) * 79.0 ) ;
274- y = fibonacci ( x ) ;
282+ y = fibonacci ( x [ i % x . length ] ) ;
275283 if ( isnan ( y ) ) {
276284 b . fail ( 'should not return NaN' ) ;
277285 }
@@ -314,10 +322,11 @@ bench( pkg+'::iterative_doubling', function benchmark( b ) {
314322 return a + b ;
315323 }
316324
325+ x = discreteUniform ( 100 , 0 , 78 ) ;
326+
317327 b . tic ( ) ;
318328 for ( i = 0 ; i < b . iterations ; i ++ ) {
319- x = floor ( randu ( ) * 79.0 ) ;
320- y = fibonacci ( x ) ;
329+ y = fibonacci ( x [ i % x . length ] ) ;
321330 if ( isnan ( y ) ) {
322331 b . fail ( 'should not return NaN' ) ;
323332 }
@@ -337,7 +346,7 @@ bench( pkg+'::iterative_doubling_memoized', function benchmark( b ) {
337346 var y ;
338347 var i ;
339348
340- arr = new Array ( 79 ) ;
349+ arr = zeros ( 79 ) ;
341350 arr [ 0 ] = 0 ;
342351 arr [ 1 ] = 1 ;
343352 arr [ 2 ] = 1 ;
@@ -377,10 +386,11 @@ bench( pkg+'::iterative_doubling_memoized', function benchmark( b ) {
377386 return a + b ;
378387 }
379388
389+ x = discreteUniform ( 100 , 0 , 78 ) ;
390+
380391 b . tic ( ) ;
381392 for ( i = 0 ; i < b . iterations ; i ++ ) {
382- x = floor ( randu ( ) * 79.0 ) ;
383- y = fibonacci ( x ) ;
393+ y = fibonacci ( x [ i % x . length ] ) ;
384394 if ( isnan ( y ) ) {
385395 b . fail ( 'should not return NaN' ) ;
386396 }
0 commit comments