2121// MODULES //
2222
2323var tape = require ( 'tape' ) ;
24- var toAccessorArray = require ( '@stdlib/array /base/to-accessor-array ' ) ;
24+ var isnan = require ( '@stdlib/math /base/assert/is-nan ' ) ;
2525var isPositiveZero = require ( '@stdlib/math/base/assert/is-positive-zero' ) ;
26+ var toAccessorArray = require ( '@stdlib/array/base/to-accessor-array' ) ;
2627var range = require ( './../lib/ndarray.js' ) ;
2728
2829
2930// TESTS //
3031
31- tape ( 'main export is a function' , function test ( t ) {
32- t . ok ( true , __filename ) ;
33- t . strictEqual ( typeof range , 'function' , 'main export is a function' ) ;
32+ tape ( 'main export is a function' , function test ( t ) {
33+ t . ok ( true , __filename ) ;
34+ t . strictEqual ( typeof range , 'function' , 'main export is a function' ) ;
3435 t . end ( ) ;
3536} ) ;
3637
37- tape ( 'the function has an arity of 4' , function test ( t ) {
38- t . strictEqual ( range . length , 4 , 'has expected arity' ) ;
38+ tape ( 'the function has an arity of 4' , function test ( t ) {
39+ t . strictEqual ( range . length , 4 , 'has expected arity' ) ;
3940 t . end ( ) ;
4041} ) ;
4142
42- tape ( 'the function calculates the range of a strided array' , function test ( t ) {
43+ tape ( 'the function calculates the range of a strided array' , function test ( t ) {
4344 var x ;
4445 var v ;
4546
46- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
47- v = range ( x . length , x , 1 , 0 ) ;
48- t . strictEqual ( v , 9.0 , 'returns expected value' ) ;
47+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
48+ v = range ( x . length , x , 1 , 0 ) ;
49+ t . strictEqual ( v , 9.0 , 'returns expected value' ) ;
50+
51+ x = [ - 4.0 , - 5.0 ] ;
52+ v = range ( x . length , x , 1 , 0 ) ;
53+ t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
4954
50- x = [ - 4 .0, - 5.0 ] ;
51- v = range ( x . length , x , 1 , 0 ) ;
52- t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
55+ x = [ - 0 .0, 0.0 , - 0.0 ] ;
56+ v = range ( x . length , x , 1 , 0 ) ;
57+ t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
5358
54- x = [ - 0.0 , 0.0 , - 0.0 ] ;
55- v = range ( x . length , x , 1 , 0 ) ;
56- t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
59+ x = [ NaN ] ;
60+ v = range ( x . length , x , 1 , 0 ) ;
61+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
62+
63+ x = [ NaN , NaN ] ;
64+ v = range ( x . length , x , 1 , 0 ) ;
65+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
5766
5867 t . end ( ) ;
5968} ) ;
6069
61- tape ( 'the function calculates the range of a sorted strided array (accessor )' , function test ( t ) {
70+ tape ( 'the function calculates the range of a strided array (accessors )' , function test ( t ) {
6271 var x ;
6372 var v ;
6473
65- x = [ - 3.0 , - 2.0 , - 1.0 , 1.0 , 2.0 , 3.0 ] ;
66- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
67- t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
74+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
75+ v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
76+ t . strictEqual ( v , 9.0 , 'returns expected value' ) ;
77+
78+ x = [ - 4.0 , - 5.0 ] ;
79+ v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
80+ t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
6881
69- x = [ 3.0 , 2.0 , 1 .0, 0.0 , - 1.0 , - 2.0 , - 3.0 ] ;
70- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
71- t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
82+ x = [ - 0 .0, 0.0 , - 0.0 ] ;
83+ v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
84+ t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
7285
73- x = [ - 4.0 , - 5.0 ] ;
74- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
75- t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
86+ x = [ NaN ] ;
87+ v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
88+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
7689
77- x = [ - 4.0 , - 4.0 ] ;
78- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
79- t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
90+ x = [ NaN , NaN ] ;
91+ v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
92+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
8093
81- x = [ - 0.0 , - 0.0 , 0.0 ] ;
82- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
83- t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
94+ t . end ( ) ;
95+ } ) ;
96+
97+ tape ( 'if provided an `N` parameter less than or equal to `0`, the function returns `NaN`' , function test ( t ) {
98+ var x ;
99+ var v ;
84100
85- x = [ - 0.0 , - 0.0 , - 0.0 , 0.0 ] ;
86- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
87- t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
101+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
88102
89- x = [ 0.0 , - 0.0 , - 0.0 ] ;
90- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
91- t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
103+ v = range ( 0 , x , 1 , 0 ) ;
104+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
92105
93- x = [ 5.0 , 5.0 , 5.0 ] ;
94- v = range ( x . length , toAccessorArray ( x ) , 1 , 0 ) ;
95- t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
106+ v = range ( - 1 , x , 1 , 0 ) ;
107+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
96108
97109 t . end ( ) ;
98110} ) ;
99111
100- tape ( 'if provided an `N` parameter equal to `1 `, the function returns `0` or ` NaN`' , function test ( t ) {
112+ tape ( 'if provided an `N` parameter less than or equal to `0 `, the function returns `NaN` (accessors) ' , function test ( t ) {
101113 var x ;
102114 var v ;
103115
104- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
116+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
117+
118+ v = range ( 0 , toAccessorArray ( x ) , 1 , 0 ) ;
119+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
120+
121+ v = range ( - 1 , toAccessorArray ( x ) , 1 , 0 ) ;
122+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
105123
106- v = range ( 1 , x , 1 , 0 ) ;
107- t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
108124 t . end ( ) ;
109125} ) ;
110126
111- tape ( 'the function supports a `stride` parameter' , function test ( t ) {
127+ tape ( 'if provided an `N` parameter equal to `1`, the function returns `0` or `NaN`' , function test ( t ) {
128+ var x ;
129+ var v ;
130+
131+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
132+
133+ v = range ( 1 , x , 1 , 0 ) ;
134+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
135+
136+ x = [ NaN , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
137+
138+ v = range ( 1 , x , 1 , 0 ) ;
139+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
140+
141+ t . end ( ) ;
142+ } ) ;
143+
144+ tape ( 'if provided an `N` parameter equal to `1`, the function returns `0` or `NaN` (accessors)' , function test ( t ) {
145+ var x ;
146+ var v ;
147+
148+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
149+
150+ v = range ( 1 , toAccessorArray ( x ) , 1 , 0 ) ;
151+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
152+
153+ x = [ NaN , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
154+
155+ v = range ( 1 , toAccessorArray ( x ) , 1 , 0 ) ;
156+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
157+
158+ t . end ( ) ;
159+ } ) ;
160+
161+ tape ( 'the function supports a `stride` parameter' , function test ( t ) {
112162 var x ;
113163 var v ;
114164
@@ -123,13 +173,55 @@ tape('the function supports a `stride` parameter', function test(t) {
123173 2.0
124174 ] ;
125175
126- v = range ( 4 , x , 2 , 0 ) ;
176+ v = range ( 4 , x , 2 , 0 ) ;
127177
128- t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
178+ t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
129179 t . end ( ) ;
130180} ) ;
131181
132- tape ( 'the function supports a negative `stride` parameter' , function test ( t ) {
182+ tape ( 'the function supports a `stride` parameter (accessors)' , function test ( t ) {
183+ var x ;
184+ var v ;
185+
186+ x = [
187+ 1.0 , // 0
188+ 2.0 ,
189+ 2.0 , // 1
190+ - 7.0 ,
191+ - 2.0 , // 2
192+ 3.0 ,
193+ 4.0 , // 3
194+ 2.0
195+ ] ;
196+
197+ v = range ( 4 , toAccessorArray ( x ) , 2 , 0 ) ;
198+
199+ t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
200+ t . end ( ) ;
201+ } ) ;
202+
203+ tape ( 'the function supports a negative `stride` parameter' , function test ( t ) {
204+ var x ;
205+ var v ;
206+
207+ x = [
208+ 1.0 , // 3
209+ 2.0 ,
210+ 2.0 , // 2
211+ - 7.0 ,
212+ - 2.0 , // 1
213+ 3.0 ,
214+ 4.0 , // 0
215+ 2.0
216+ ] ;
217+
218+ v = range ( 4 , x , - 2 , 6 ) ;
219+
220+ t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
221+ t . end ( ) ;
222+ } ) ;
223+
224+ tape ( 'the function supports a negative `stride` parameter (accessors)' , function test ( t ) {
133225 var x ;
134226 var v ;
135227
@@ -138,42 +230,53 @@ tape('the function supports a negative `stride` parameter', function test(t) {
138230 2.0 ,
139231 2.0 , // 2
140232 - 7.0 ,
141- 3 .0, // 1
233+ - 2 .0, // 1
142234 3.0 ,
143235 4.0 , // 0
144236 2.0
145237 ] ;
146238
147- v = range ( 4 , x , - 2 , 6 ) ;
239+ v = range ( 4 , toAccessorArray ( x ) , - 2 , 6 ) ;
148240
149- t . strictEqual ( v , 3 , 'returns expected value' ) ;
241+ t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
150242 t . end ( ) ;
151243} ) ;
152244
153- tape ( 'if provided a `stride` parameter equal to `0`, the function returns `0` or `NaN`' , function test ( t ) {
245+ tape ( 'if provided a `stride` parameter equal to `0`, the function returns `0` or `NaN`' , function test ( t ) {
154246 var x ;
155247 var v ;
156248
157- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
249+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
250+
251+ v = range ( x . length , x , 0 , 0 ) ;
252+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
253+
254+ x = [ NaN , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
255+
256+ v = range ( x . length , x , 0 , 0 ) ;
257+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
158258
159- v = range ( x . length , x , 0 , 0 ) ;
160- t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
161259 t . end ( ) ;
162260} ) ;
163261
164- tape ( 'if provided a `stride` parameter equal to `0`, the function returns the first indexed element (accessor )' , function test ( t ) {
262+ tape ( 'if provided a `stride` parameter equal to `0`, the function returns `0` or `NaN` (accessors )' , function test ( t ) {
165263 var x ;
166264 var v ;
167265
168- x = [ 1.0 , - 2.0 , - 4.0 , - 5.0 , - 6.0 ] ;
266+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
267+
268+ v = range ( x . length , toAccessorArray ( x ) , 0 , 0 ) ;
269+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
169270
170- v = range ( x . length , toAccessorArray ( x ) , 0 , 0 ) ;
171- t . strictEqual ( v , 0 , 'returns expected value' ) ;
271+ x = [ NaN , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
272+
273+ v = range ( x . length , toAccessorArray ( x ) , 0 , 0 ) ;
274+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
172275
173276 t . end ( ) ;
174277} ) ;
175278
176- tape ( 'the function supports an `offset` parameter' , function test ( t ) {
279+ tape ( 'the function supports an `offset` parameter' , function test ( t ) {
177280 var x ;
178281 var v ;
179282
@@ -188,29 +291,29 @@ tape('the function supports an `offset` parameter', function test(t) {
188291 4.0 // 3
189292 ] ;
190293
191- v = range ( 4 , x , 2 , 1 ) ;
192- t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
294+ v = range ( 4 , x , 2 , 1 ) ;
295+ t . strictEqual ( v , 6.0 , 'returns expected value' ) ;
193296
194297 t . end ( ) ;
195298} ) ;
196299
197- tape ( 'the function supports an `offset` parameter (accessor )' , function test ( t ) {
300+ tape ( 'the function supports an `offset` parameter (accessors )' , function test ( t ) {
198301 var x ;
199302 var v ;
200303
201304 x = [
202305 2.0 ,
203306 1.0 , // 0
204307 2.0 ,
205- 2.0 , // 1
308+ - 2.0 , // 1
206309 - 2.0 ,
207- 3 .0, // 2
310+ 2 .0, // 2
208311 3.0 ,
209312 4.0 // 3
210313 ] ;
211314
212- v = range ( 4 , toAccessorArray ( x ) , 2 , 1 ) ;
213- t . ok ( v , 3 .0, 'returns expected value' ) ;
315+ v = range ( 4 , toAccessorArray ( x ) , 2 , 1 ) ;
316+ t . strictEqual ( v , 6 .0, 'returns expected value' ) ;
214317
215318 t . end ( ) ;
216319} ) ;
0 commit comments