21
21
// MODULES //
22
22
23
23
var bench = require ( '@stdlib/bench' ) ;
24
- var randu = require ( '@stdlib/random/array/discrete-uniform' ) ;
24
+ var discreteUniform = require ( '@stdlib/random/array/discrete-uniform' ) ;
25
25
var roundf = require ( '@stdlib/math/base/special/roundf' ) ;
26
26
var pow = require ( '@stdlib/math/base/special/pow' ) ;
27
27
var absf = require ( '@stdlib/math/base/special/absf' ) ;
28
28
var isnanf = require ( '@stdlib/math/base/assert/is-nanf' ) ;
29
29
var PHI = require ( '@stdlib/constants/float32/phi' ) ;
30
+ var zeros = require ( '@stdlib/array/base/zeros' ) ;
30
31
var pkg = require ( './../package.json' ) . name ;
31
32
var NEGALUCAS = require ( './../lib/negalucas.json' ) ;
32
33
var negalucasf = require ( './../lib' ) ;
@@ -39,7 +40,7 @@ bench( pkg, function benchmark( b ) {
39
40
var y ;
40
41
var i ;
41
42
42
- x = randu ( 100 , - 34 , 0 ) ;
43
+ x = discreteUniform ( 100 , - 34 , 0 ) ;
43
44
44
45
b . tic ( ) ;
45
46
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -61,12 +62,7 @@ bench( pkg+'::analytic', function benchmark( b ) {
61
62
var y ;
62
63
var i ;
63
64
64
- x = randu ( 100 , - 34 , 0 ) ;
65
-
66
- function negalucasf ( n ) {
67
- var an = absf ( n ) ;
68
- return pow ( - 1.0 , an ) * roundf ( pow ( PHI , an ) ) ;
69
- }
65
+ x = discreteUniform ( 100 , - 34 , 0 ) ;
70
66
71
67
b . tic ( ) ;
72
68
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -81,14 +77,19 @@ bench( pkg+'::analytic', function benchmark( b ) {
81
77
}
82
78
b . pass ( 'benchmark finished' ) ;
83
79
b . end ( ) ;
80
+
81
+ function negalucasf ( n ) {
82
+ var an = absf ( n ) ;
83
+ return pow ( - 1.0 , an ) * roundf ( pow ( PHI , an ) ) ;
84
+ }
84
85
} ) ;
85
86
86
87
bench ( pkg + '::table' , function benchmark ( b ) {
87
88
var x ;
88
89
var y ;
89
90
var i ;
90
91
91
- x = randu ( 100 , - 34 , 0 ) ;
92
+ x = discreteUniform ( 100 , - 34 , 0 ) ;
92
93
93
94
b . tic ( ) ;
94
95
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -110,17 +111,7 @@ bench( pkg+'::naive_recursion', function benchmark( b ) {
110
111
var y ;
111
112
var i ;
112
113
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
-
123
- x = randu ( 100 , - 20 , 0 ) ;
114
+ x = discreteUniform ( 100 , - 20 , 0 ) ;
124
115
125
116
b . tic ( ) ;
126
117
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -135,6 +126,16 @@ bench( pkg+'::naive_recursion', function benchmark( b ) {
135
126
}
136
127
b . pass ( 'benchmark finished' ) ;
137
128
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
+ }
138
139
} ) ;
139
140
140
141
bench ( pkg + '::recursion_memoized' , function benchmark ( b ) {
@@ -144,11 +145,27 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
144
145
var y ;
145
146
var i ;
146
147
147
- arr = new Array ( 35 ) ;
148
+ arr = zeros ( 35 ) ;
148
149
arr [ 0 ] = 2 ;
149
150
arr [ 1 ] = - 1 ;
150
151
N = 1 ;
151
152
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
+
152
169
function negalucasf ( n ) {
153
170
var an = absf ( n ) ;
154
171
if ( an <= N ) {
@@ -157,8 +174,14 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
157
174
arr [ an ] = negalucasf ( n + 2 ) - negalucasf ( n + 1 ) ;
158
175
return arr [ an ] ;
159
176
}
177
+ } ) ;
160
178
161
- x = randu ( 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 ) ;
162
185
163
186
b . tic ( ) ;
164
187
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -173,12 +196,6 @@ bench( pkg+'::recursion_memoized', function benchmark( b ) {
173
196
}
174
197
b . pass ( 'benchmark finished' ) ;
175
198
b . end ( ) ;
176
- } ) ;
177
-
178
- bench ( pkg + '::naive_iterative' , function benchmark ( b ) {
179
- var x ;
180
- var y ;
181
- var i ;
182
199
183
200
function negalucasf ( n ) {
184
201
var arr ;
@@ -187,16 +204,22 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
187
204
188
205
an = absf ( n ) ;
189
206
190
- arr = new Array ( an + 1 ) ;
207
+ arr = zeros ( an + 1 ) ;
191
208
arr [ 0 ] = 2 ;
192
209
arr [ 1 ] = - 1 ;
193
210
for ( i = 2 ; i <= an ; i ++ ) {
194
211
arr [ i ] = arr [ i - 2 ] - arr [ i - 1 ] ;
195
212
}
196
213
return arr [ an ] ;
197
214
}
215
+ } ) ;
216
+
217
+ bench ( pkg + '::iterative' , function benchmark ( b ) {
218
+ var x ;
219
+ var y ;
220
+ var i ;
198
221
199
- x = randu ( 100 , - 34 , 0 ) ;
222
+ x = discreteUniform ( 100 , - 34 , 0 ) ;
200
223
201
224
b . tic ( ) ;
202
225
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -211,12 +234,6 @@ bench( pkg+'::naive_iterative', function benchmark( b ) {
211
234
}
212
235
b . pass ( 'benchmark finished' ) ;
213
236
b . end ( ) ;
214
- } ) ;
215
-
216
- bench ( pkg + '::iterative' , function benchmark ( b ) {
217
- var x ;
218
- var y ;
219
- var i ;
220
237
221
238
function negalucasf ( n ) {
222
239
var an ;
@@ -236,8 +253,21 @@ bench( pkg+'::iterative', function benchmark( b ) {
236
253
}
237
254
return b ;
238
255
}
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 ;
239
269
240
- x = randu ( 100 , - 34 , 0 ) ;
270
+ x = discreteUniform ( 100 , - 34 , 0 ) ;
241
271
242
272
b . tic ( ) ;
243
273
for ( i = 0 ; i < b . iterations ; i ++ ) {
@@ -252,19 +282,6 @@ bench( pkg+'::iterative', function benchmark( b ) {
252
282
}
253
283
b . pass ( 'benchmark finished' ) ;
254
284
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 ;
268
285
269
286
function negalucasf ( n ) {
270
287
var an ;
@@ -279,20 +296,4 @@ bench( pkg+'::iterative_memoized', function benchmark( b ) {
279
296
}
280
297
return arr [ an ] ;
281
298
}
282
-
283
- x = randu ( 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 ( ) ;
298
299
} ) ;
0 commit comments