@@ -27,6 +27,7 @@ var pow = require( '@stdlib/math/base/special/pow' );
2727var absf = require ( '@stdlib/math/base/special/absf' ) ;
2828var isnanf = require ( '@stdlib/math/base/assert/is-nanf' ) ;
2929var PHI = require ( '@stdlib/constants/float32/phi' ) ;
30+ var zeros = require ( '@stdlib/array/base/zeros' ) ;
3031var pkg = require ( './../package.json' ) . name ;
3132var NEGALUCAS = require ( './../lib/negalucas.json' ) ;
3233var negalucasf = require ( './../lib' ) ;
@@ -63,11 +64,6 @@ bench( pkg+'::analytic', function benchmark( b ) {
6364
6465 x = discreteUniform ( 100 , - 34 , 0 ) ;
6566
66- function negalucasf ( n ) {
67- var an = absf ( n ) ;
68- return pow ( - 1.0 , an ) * roundf ( pow ( PHI , an ) ) ;
69- }
70-
7167 b . tic ( ) ;
7268 for ( i = 0 ; i < b . iterations ; i ++ ) {
7369 y = negalucasf ( x [ i % x . length ] ) ;
@@ -81,6 +77,11 @@ bench( pkg+'::analytic', function benchmark( b ) {
8177 }
8278 b . pass ( 'benchmark finished' ) ;
8379 b . end ( ) ;
80+
81+ function negalucasf ( n ) {
82+ var an = absf ( n ) ;
83+ return pow ( - 1.0 , an ) * roundf ( pow ( PHI , an ) ) ;
84+ }
8485} ) ;
8586
8687bench ( pkg + '::table' , function benchmark ( b ) {
@@ -110,16 +111,6 @@ bench( pkg+'::naive_recursion', function benchmark( b ) {
110111 var y ;
111112 var i ;
112113
113- function negalucasf ( n ) {
114- if ( n === 0 ) {
115- return 2 ;
116- }
117- if ( n === - 1 ) {
118- return - 1 ;
119- }
120- return negalucasf ( n + 2 ) - negalucasf ( n + 1 ) ;
121- }
122-
123114 x = discreteUniform ( 100 , - 20 , 0 ) ;
124115
125116 b . tic ( ) ;
@@ -135,6 +126,16 @@ bench( pkg+'::naive_recursion', function benchmark( b ) {
135126 }
136127 b . pass ( 'benchmark finished' ) ;
137128 b . end ( ) ;
129+
130+ function negalucasf ( n ) {
131+ if ( n === 0 ) {
132+ return 2 ;
133+ }
134+ if ( n === - 1 ) {
135+ return - 1 ;
136+ }
137+ return negalucasf ( n + 2 ) - negalucasf ( n + 1 ) ;
138+ }
138139} ) ;
139140
140141bench ( pkg + '::recursion_memoized' , function benchmark ( b ) {
@@ -144,11 +145,27 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
144145 var y ;
145146 var i ;
146147
147- arr = new Array ( 35 ) ;
148+ arr = zeroes ( 35 ) ;
148149 arr [ 0 ] = 2 ;
149150 arr [ 1 ] = - 1 ;
150151 N = 1 ;
151152
153+ x = discreteUniform ( 100 , - 20 , 0 ) ;
154+
155+ b . tic ( ) ;
156+ for ( i = 0 ; i < b . iterations ; i ++ ) {
157+ y = negalucasf ( x [ i % x . length ] ) ;
158+ if ( isnanf ( y ) ) {
159+ b . fail ( 'should not return NaN' ) ;
160+ }
161+ }
162+ b . toc ( ) ;
163+ if ( isnanf ( y ) ) {
164+ b . fail ( 'should not return NaN' ) ;
165+ }
166+ b . pass ( 'benchmark finished' ) ;
167+ b . end ( ) ;
168+
152169 function negalucasf ( n ) {
153170 var an = absf ( n ) ;
154171 if ( an <= N ) {
@@ -157,8 +174,14 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
157174 arr [ an ] = negalucasf ( n + 2 ) - negalucasf ( n + 1 ) ;
158175 return arr [ an ] ;
159176 }
177+ } ) ;
160178
161- x = discreteUniform ( 100 , - 20 , 0 ) ;
179+ bench ( pkg + '::naive_iterative' , function benchmark ( b ) {
180+ var x ;
181+ var y ;
182+ var i ;
183+
184+ x = discreteUniform ( 100 , - 34 , 0 ) ;
162185
163186 b . tic ( ) ;
164187 for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -173,12 +196,6 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
173196 }
174197 b . pass ( 'benchmark finished' ) ;
175198 b . end ( ) ;
176- } ) ;
177-
178- bench ( pkg + '::naive_iterative' , function benchmark ( b ) {
179- var x ;
180- var y ;
181- var i ;
182199
183200 function negalucasf ( n ) {
184201 var arr ;
@@ -187,14 +204,20 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
187204
188205 an = absf ( n ) ;
189206
190- arr = new Array ( an + 1 ) ;
207+ arr = zeros ( an + 1 ) ;
191208 arr [ 0 ] = 2 ;
192209 arr [ 1 ] = - 1 ;
193210 for ( i = 2 ; i <= an ; i ++ ) {
194211 arr [ i ] = arr [ i - 2 ] - arr [ i - 1 ] ;
195212 }
196213 return arr [ an ] ;
197214 }
215+ } ) ;
216+
217+ bench ( pkg + '::iterative' , function benchmark ( b ) {
218+ var x ;
219+ var y ;
220+ var i ;
198221
199222 x = discreteUniform ( 100 , - 34 , 0 ) ;
200223
@@ -211,12 +234,6 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
211234 }
212235 b . pass ( 'benchmark finished' ) ;
213236 b . end ( ) ;
214- } ) ;
215-
216- bench ( pkg + '::iterative' , function benchmark ( b ) {
217- var x ;
218- var y ;
219- var i ;
220237
221238 function negalucasf ( n ) {
222239 var an ;
@@ -236,6 +253,19 @@ bench( pkg+'::iterative', function benchmark( b ) {
236253 }
237254 return b ;
238255 }
256+ } ) ;
257+
258+ bench ( pkg + '::iterative_memoized' , function benchmark ( b ) {
259+ var arr ;
260+ var N ;
261+ var x ;
262+ var y ;
263+ var i ;
264+
265+ arr = zeros ( 35 ) ;
266+ arr [ 0 ] = 2 ;
267+ arr [ 1 ] = - 1 ;
268+ N = 2 ;
239269
240270 x = discreteUniform ( 100 , - 34 , 0 ) ;
241271
@@ -252,19 +282,6 @@ bench( pkg+'::iterative', function benchmark( b ) {
252282 }
253283 b . pass ( 'benchmark finished' ) ;
254284 b . end ( ) ;
255- } ) ;
256-
257- bench ( pkg + '::iterative_memoized' , function benchmark ( b ) {
258- var arr ;
259- var N ;
260- var x ;
261- var y ;
262- var i ;
263-
264- arr = new Array ( 35 ) ;
265- arr [ 0 ] = 2 ;
266- arr [ 1 ] = - 1 ;
267- N = 2 ;
268285
269286 function negalucasf ( n ) {
270287 var an ;
@@ -279,20 +296,4 @@ bench( pkg+'::iterative_memoized', function benchmark( b ) {
279296 }
280297 return arr [ an ] ;
281298 }
282-
283- x = discreteUniform ( 100 , - 34 , 0 ) ;
284-
285- b . tic ( ) ;
286- for ( i = 0 ; i < b . iterations ; i ++ ) {
287- y = negalucasf ( x [ i % x . length ] ) ;
288- if ( isnanf ( y ) ) {
289- b . fail ( 'should not return NaN' ) ;
290- }
291- }
292- b . toc ( ) ;
293- if ( isnanf ( y ) ) {
294- b . fail ( 'should not return NaN' ) ;
295- }
296- b . pass ( 'benchmark finished' ) ;
297- b . end ( ) ;
298299} ) ;
0 commit comments