2222
2323var tape = require ( 'tape' ) ;
2424var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
25+ var isPositiveZero = require ( '@stdlib/math/base/assert/is-positive-zero' ) ;
2526var Float64Array = require ( '@stdlib/array/float64' ) ;
2627var ndarray = require ( '@stdlib/ndarray/base/ctor' ) ;
2728var dmidrange = require ( './../lib' ) ;
@@ -39,6 +40,7 @@ var dmidrange = require( './../lib' );
3940* @param {NonNegativeInteger } offset - index offset
4041* @returns {ndarray } one-dimensional ndarray
4142*/
43+
4244function vector ( buffer , length , stride , offset ) {
4345 return new ndarray ( 'float64' , buffer , [ length ] , [ stride ] , offset , 'row-major' ) ;
4446}
@@ -57,109 +59,119 @@ tape( 'the function has an arity of 1', function test( t ) {
5759 t . end ( ) ;
5860} ) ;
5961
60- tape ( 'the function returns NaN when provided an input ndarray containing NaN values ' , function test ( t ) {
62+ tape ( 'the function calculates the mid-range of an input ndarray' , function test ( t ) {
6163 var x ;
6264 var v ;
6365
64- x = new Float64Array ( [ 1.0 , - 2.0 , NaN , 2.0 ] ) ;
66+ x = new Float64Array ( [ 1.0 , - 2.0 , - 4.0 , 5.0 , 0.0 , 3.0 ] ) ;
67+ v = dmidrange ( [ vector ( x , 6 , 1 , 0 ) ] ) ;
68+ t . strictEqual ( v , 0.5 , 'returns expected value' ) ;
69+
70+ x = new Float64Array ( [ - 4.0 , - 5.0 ] ) ;
71+ v = dmidrange ( [ vector ( x , 2 , 1 , 0 ) ] ) ;
72+ t . strictEqual ( v , - 4.5 , 'returns expected value' ) ;
73+
74+ x = new Float64Array ( [ - 0.0 , 0.0 , - 0.0 ] ) ;
75+ v = dmidrange ( [ vector ( x , 3 , 1 , 0 ) ] ) ;
76+ t . strictEqual ( isPositiveZero ( v ) , true , 'returns expected value' ) ;
6577
66- v = dmidrange ( [ vector ( x , 4 , 1 , 0 ) ] ) ;
67- t . strictEqual ( isnan ( v ) , true , 'returns NaN' ) ;
78+ x = new Float64Array ( [ NaN ] ) ;
79+ v = dmidrange ( [ vector ( x , 1 , 1 , 0 ) ] ) ;
80+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
6881
69- x = new Float64Array ( [ 1.0 , - 2.0 , - 4.0 , 5.0 , NaN , 0.0 , 3.0 ] ) ;
70- v = dmidrange ( [ vector ( x , 7 , 1 , 0 ) ] ) ;
71- t . strictEqual ( isnan ( v ) , true , 'returns NaN' ) ;
72- x = new Float64Array ( [ - 4.0 , NaN ] ) ;
82+ x = new Float64Array ( [ NaN , NaN ] ) ;
7383 v = dmidrange ( [ vector ( x , 2 , 1 , 0 ) ] ) ;
74- t . strictEqual ( isnan ( v ) , true , 'returns NaN' ) ;
84+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
85+
7586 t . end ( ) ;
7687} ) ;
7788
78- tape ( 'when provided an empty input ndarray, the function returns NaN' , function test ( t ) {
89+ tape ( 'when provided an empty input ndarray, the function returns ` NaN` ' , function test ( t ) {
7990 var x ;
8091 var v ;
8192
8293 x = new Float64Array ( [ ] ) ;
8394 v = dmidrange ( [ vector ( x , 0 , 1 , 0 ) ] ) ;
84- t . strictEqual ( isnan ( v ) , true , 'returns NaN' ) ;
85- t . end ( ) ;
86- } ) ;
87-
88- tape ( 'when provided an input ndarray containing only NaN values, the function returns NaN' , function test ( t ) {
89- var x ;
90- var v ;
95+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
9196
92- x = new Float64Array ( [ NaN , NaN , NaN ] ) ;
93- v = dmidrange ( [ vector ( x , 3 , 1 , 0 ) ] ) ;
94- t . strictEqual ( isnan ( v ) , true , 'returns NaN' ) ;
9597 t . end ( ) ;
9698} ) ;
9799
98- tape ( 'when provided an input ndarray containing a single element , the function returns that element' , function test ( t ) {
100+ tape ( 'when provided an input ndarray having a length equal to `1` , the function returns the first element' , function test ( t ) {
99101 var x ;
100102 var v ;
101103
102104 x = new Float64Array ( [ 1.0 ] ) ;
103105 v = dmidrange ( [ vector ( x , 1 , 1 , 0 ) ] ) ;
104106 t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
105107
108+ x = new Float64Array ( [ NaN ] ) ;
109+ v = dmidrange ( [ vector ( x , 1 , 1 , 0 ) ] ) ;
110+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
111+
106112 t . end ( ) ;
107113} ) ;
108114
109- tape ( 'the function supports positive strides ' , function test ( t ) {
115+ tape ( 'the function supports a `stride` parameter ' , function test ( t ) {
110116 var x ;
111117 var v ;
112118
113119 x = new Float64Array ( [
114- 1.0 ,
115- 2.0 ,
120+ 1.0 , // 0
116121 2.0 ,
122+ 2.0 , // 1
117123 - 7.0 ,
118- - 2.0 ,
124+ - 2.0 , // 2
119125 3.0 ,
120- 4.0 ,
126+ 4.0 , // 3
121127 2.0 ,
122128 6.0
123129 ] ) ;
124130
125- v = dmidrange ( [ vector ( x , 5 , 2 , 0 ) ] ) ;
126- t . strictEqual ( v , 2.0 , 'returns expected value' ) ;
131+ v = dmidrange ( [ vector ( x , 4 , 2 , 0 ) ] ) ;
132+ t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
133+
127134 t . end ( ) ;
128135} ) ;
129136
130- tape ( 'the function supports negative strides ' , function test ( t ) {
137+ tape ( 'the function supports a negative `stride` parameter ' , function test ( t ) {
131138 var x ;
132139 var v ;
133140
134141 x = new Float64Array ( [
135- 1.0 ,
136- 2.0 ,
142+ 1.0 , // 3
137143 2.0 ,
144+ 2.0 , // 2
138145 - 7.0 ,
139- - 2.0 ,
146+ - 2.0 , // 1
140147 3.0 ,
141- 4.0 ,
148+ 4.0 , // 0
142149 2.0 ,
143150 6.0
144151 ] ) ;
145152
146- v = dmidrange ( [ vector ( x , 5 , - 2 , 8 ) ] ) ;
147- t . strictEqual ( v , 2.0 , 'returns expected value' ) ;
153+ v = dmidrange ( [ vector ( x , 4 , - 2 , 6 ) ] ) ;
154+ t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
155+
148156 t . end ( ) ;
149157} ) ;
150158
151- tape ( 'when provided an input ndarray having a stride equal to 0 , the function returns the first indexed element' , function test ( t ) {
159+ tape ( 'if provided a ` stride` parameter equal to `0` , the function returns the first element' , function test ( t ) {
152160 var x ;
153161 var v ;
154162
155163 x = new Float64Array ( [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ) ;
156164 v = dmidrange ( [ vector ( x , 5 , 0 , 0 ) ] ) ;
157165 t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
158166
167+ x = new Float64Array ( [ NaN , - 2.0 , - 4.0 , 5.0 , 3.0 ] ) ;
168+ v = dmidrange ( [ vector ( x , 5 , 0 , 0 ) ] ) ;
169+ t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
170+
159171 t . end ( ) ;
160172} ) ;
161173
162- tape ( 'the function supports view offsets ' , function test ( t ) {
174+ tape ( 'the function supports an `offset` parameter ' , function test ( t ) {
163175 var x ;
164176 var v ;
165177
@@ -171,12 +183,11 @@ tape( 'the function supports view offsets', function test( t ) {
171183 - 2.0 ,
172184 2.0 , // 2
173185 3.0 ,
174- 4.0 , // 3
175- 6.0 ,
176- 6.0 // 4
186+ 4.0 // 3
177187 ] ) ;
178188
179- v = dmidrange ( [ vector ( x , 5 , 2 , 1 ) ] ) ;
180- t . strictEqual ( v , 2.0 , 'returns expected value' ) ;
189+ v = dmidrange ( [ vector ( x , 4 , 2 , 1 ) ] ) ;
190+ t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
191+
181192 t . end ( ) ;
182193} ) ;
0 commit comments