2121// MODULES //
2222
2323var tape = require ( 'tape' ) ;
24- var toAccessorArray = require ( '@stdlib/array/base/to-accessor-array' ) ;
2524var sqrt = require ( '@stdlib/math/base/special/sqrt' ) ;
2625var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
26+ var toAccessorArray = require ( '@stdlib/array/base/to-accessor-array' ) ;
2727var stdevpn = require ( './../lib/ndarray.js' ) ;
2828
2929
@@ -44,6 +44,25 @@ tape( 'the function calculates the population standard deviation of a strided ar
4444 var x ;
4545 var v ;
4646
47+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
48+ v = stdevpn ( x . length , 0 , x , 1 , 0 ) ;
49+ t . strictEqual ( v , sqrt ( 53.5 / x . length ) , 'returns expected value' ) ;
50+
51+ x = [ - 4.0 , - 4.0 ] ;
52+ v = stdevpn ( x . length , 0 , x , 1 , 0 ) ;
53+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
54+
55+ x = [ NaN , 4.0 ] ;
56+ v = stdevpn ( x . length , 0 , x , 1 , 0 ) ;
57+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
58+
59+ t . end ( ) ;
60+ } ) ;
61+
62+ tape ( 'the function calculates the population standard deviation of a strided array (accessors)' , function test ( t ) {
63+ var x ;
64+ var v ;
65+
4766 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
4867 v = stdevpn ( x . length , 0 , toAccessorArray ( x ) , 1 , 0 ) ;
4968 t . strictEqual ( v , sqrt ( 53.5 / x . length ) , 'returns expected value' ) ;
@@ -63,6 +82,25 @@ tape( 'the function calculates the sample standard deviation of a strided array'
6382 var x ;
6483 var v ;
6584
85+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
86+ v = stdevpn ( x . length , 1 , x , 1 , 0 ) ;
87+ t . strictEqual ( v , sqrt ( 53.5 / ( x . length - 1 ) ) , 'returns expected value' ) ;
88+
89+ x = [ - 4.0 , - 4.0 ] ;
90+ v = stdevpn ( x . length , 1 , x , 1 , 0 ) ;
91+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
92+
93+ x = [ NaN , 4.0 ] ;
94+ v = stdevpn ( x . length , 1 , x , 1 , 0 ) ;
95+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
96+
97+ t . end ( ) ;
98+ } ) ;
99+
100+ tape ( 'the function calculates the sample standard deviation of a strided array (accessors)' , function test ( t ) {
101+ var x ;
102+ var v ;
103+
66104 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ;
67105 v = stdevpn ( x . length , 1 , toAccessorArray ( x ) , 1 , 0 ) ;
68106 t . strictEqual ( v , sqrt ( 53.5 / ( x . length - 1 ) ) , 'returns expected value' ) ;
@@ -84,6 +122,21 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu
84122
85123 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
86124
125+ v = stdevpn ( 0 , 1 , x , 1 , 0 ) ;
126+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
127+
128+ v = stdevpn ( - 1 , 1 , x , 1 , 0 ) ;
129+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
130+
131+ t . end ( ) ;
132+ } ) ;
133+
134+ tape ( 'if provided an `N` parameter less than or equal to `0`, the function returns `NaN` (accessors)' , function test ( t ) {
135+ var x ;
136+ var v ;
137+
138+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
139+
87140 v = stdevpn ( 0 , 1 , toAccessorArray ( x ) , 1 , 0 ) ;
88141 t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
89142
@@ -99,6 +152,18 @@ tape( 'if provided an `N` parameter equal to `1`, the function returns a populat
99152
100153 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
101154
155+ v = stdevpn ( 1 , 0 , x , 1 , 0 ) ;
156+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
157+
158+ t . end ( ) ;
159+ } ) ;
160+
161+ tape ( 'if provided an `N` parameter equal to `1`, the function returns a population standard deviation of `0` (accessors)' , function test ( t ) {
162+ var x ;
163+ var v ;
164+
165+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
166+
102167 v = stdevpn ( 1 , 0 , toAccessorArray ( x ) , 1 , 0 ) ;
103168 t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
104169
@@ -111,6 +176,21 @@ tape( 'if provided a `correction` parameter yielding `N-correction` less than or
111176
112177 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
113178
179+ v = stdevpn ( x . length , x . length , x , 1 , 0 ) ;
180+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
181+
182+ v = stdevpn ( x . length , x . length + 1 , x , 1 , 0 ) ;
183+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
184+
185+ t . end ( ) ;
186+ } ) ;
187+
188+ tape ( 'if provided a `correction` parameter yielding `N-correction` less than or equal to `0`, the function returns `NaN` (accessors)' , function test ( t ) {
189+ var x ;
190+ var v ;
191+
192+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
193+
114194 v = stdevpn ( x . length , x . length , toAccessorArray ( x ) , 1 , 0 ) ;
115195 t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
116196
@@ -135,6 +215,27 @@ tape( 'the function supports a `stride` parameter', function test( t ) {
135215 2.0
136216 ] ;
137217
218+ v = stdevpn ( 4 , 1 , x , 2 , 0 ) ;
219+
220+ t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
221+ t . end ( ) ;
222+ } ) ;
223+
224+ tape ( 'the function supports a `stride` parameter (accessors)' , function test ( t ) {
225+ var x ;
226+ var v ;
227+
228+ x = [
229+ 1.0 , // 0
230+ 2.0 ,
231+ 2.0 , // 1
232+ - 7.0 ,
233+ - 2.0 , // 2
234+ 3.0 ,
235+ 4.0 , // 3
236+ 2.0
237+ ] ;
238+
138239 v = stdevpn ( 4 , 1 , toAccessorArray ( x ) , 2 , 0 ) ;
139240
140241 t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
@@ -156,6 +257,27 @@ tape( 'the function supports a negative `stride` parameter', function test( t )
156257 2.0
157258 ] ;
158259
260+ v = stdevpn ( 4 , 1 , x , - 2 , 6 ) ;
261+
262+ t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
263+ t . end ( ) ;
264+ } ) ;
265+
266+ tape ( 'the function supports a negative `stride` parameter (accessors)' , function test ( t ) {
267+ var x ;
268+ var v ;
269+
270+ x = [
271+ 1.0 , // 3
272+ 2.0 ,
273+ 2.0 , // 2
274+ - 7.0 ,
275+ - 2.0 , // 1
276+ 3.0 ,
277+ 4.0 , // 0
278+ 2.0
279+ ] ;
280+
159281 v = stdevpn ( 4 , 1 , toAccessorArray ( x ) , - 2 , 6 ) ;
160282
161283 t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
@@ -168,6 +290,18 @@ tape( 'if provided a `stride` parameter equal to `0`, the function returns `0`',
168290
169291 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
170292
293+ v = stdevpn ( x . length , 1 , x , 0 , 0 ) ;
294+ t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
295+
296+ t . end ( ) ;
297+ } ) ;
298+
299+ tape ( 'if provided a `stride` parameter equal to `0`, the function returns `0` (accessors)' , function test ( t ) {
300+ var x ;
301+ var v ;
302+
303+ x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
304+
171305 v = stdevpn ( x . length , 1 , toAccessorArray ( x ) , 0 , 0 ) ;
172306 t . strictEqual ( v , 0.0 , 'returns expected value' ) ;
173307
@@ -189,6 +323,27 @@ tape( 'the function supports an `offset` parameter', function test( t ) {
189323 4.0 // 3
190324 ] ;
191325
326+ v = stdevpn ( 4 , 1 , x , 2 , 1 ) ;
327+ t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
328+
329+ t . end ( ) ;
330+ } ) ;
331+
332+ tape ( 'the function supports an `offset` parameter (accessors)' , function test ( t ) {
333+ var x ;
334+ var v ;
335+
336+ x = [
337+ 2.0 ,
338+ 1.0 , // 0
339+ 2.0 ,
340+ - 2.0 , // 1
341+ - 2.0 ,
342+ 2.0 , // 2
343+ 3.0 ,
344+ 4.0 // 3
345+ ] ;
346+
192347 v = stdevpn ( 4 , 1 , toAccessorArray ( x ) , 2 , 1 ) ;
193348 t . strictEqual ( v , 2.5 , 'returns expected value' ) ;
194349
0 commit comments