11/**
22* @license Apache-2.0
33*
4- * Copyright (c) 2020 The Stdlib Authors.
4+ * Copyright (c) 2025 The Stdlib Authors.
55*
66* Licensed under the Apache License, Version 2.0 (the "License");
77* you may not use this file except in compliance with the License.
@@ -26,7 +26,6 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' );
2626var isPositiveZero = require ( '@stdlib/math/base/assert/is-positive-zero' ) ;
2727var nanminabs = require ( './../lib/ndarray.js' ) ;
2828
29-
3029// TESTS //
3130
3231tape ( 'main export is a function' , function test ( t ) {
@@ -41,8 +40,7 @@ tape( 'the function has an arity of 4', function test( t ) {
4140} ) ;
4241
4342tape ( 'the function calculates the minimum absolute value of a strided array' , function test ( t ) {
44- var x ;
45- var v ;
43+ var x , v ;
4644
4745 x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , NaN , 0.0 , 3.0 ] ;
4846 v = nanminabs ( x . length , x , 1 , 0 ) ;
@@ -67,116 +65,56 @@ tape( 'the function calculates the minimum absolute value of a strided array', f
6765 t . end ( ) ;
6866} ) ;
6967
70- tape ( 'if provided an `N` parameter less than or equal to `0`, the function returns `NaN`' , function test ( t ) {
71- var x ;
72- var v ;
73-
74- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
68+ tape ( 'if N <= 0, the function returns NaN' , function test ( t ) {
69+ var x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
7570
76- v = nanminabs ( 0 , x , 1 , 0 ) ;
77- t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
78-
79- v = nanminabs ( - 1 , x , 1 , 0 ) ;
80- t . strictEqual ( isnan ( v ) , true , 'returns expected value' ) ;
71+ t . strictEqual ( isnan ( nanminabs ( 0 , x , 1 , 0 ) ) , true , 'returns NaN' ) ;
72+ t . strictEqual ( isnan ( nanminabs ( - 1 , x , 1 , 0 ) ) , true , 'returns NaN' ) ;
8173
8274 t . end ( ) ;
8375} ) ;
8476
85- tape ( 'if provided an `N` parameter equal to `1`, the function returns the first indexed element' , function test ( t ) {
86- var x ;
87- var v ;
88-
89- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
90-
91- v = nanminabs ( 1 , x , 1 , 0 ) ;
92- t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
93-
77+ tape ( 'if N = 1, the function returns the first indexed element' , function test ( t ) {
78+ var x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
79+ t . strictEqual ( nanminabs ( 1 , x , 1 , 0 ) , 1.0 , 'returns expected value' ) ;
9480 t . end ( ) ;
9581} ) ;
9682
97- tape ( 'the function supports a `stride` parameter' , function test ( t ) {
98- var N ;
99- var x ;
100- var v ;
101-
102- x = [
103- 1.0 , // 0
104- 2.0 ,
105- 2.0 , // 1
106- - 7.0 ,
107- - 2.0 , // 2
108- 3.0 ,
109- 4.0 , // 3
110- 2.0 ,
111- NaN , // 4
112- NaN
113- ] ;
114-
115- N = floor ( x . length / 2 ) ;
116- v = nanminabs ( N , x , 2 , 0 ) ;
117-
83+ tape ( 'the function supports a stride parameter' , function test ( t ) {
84+ var x = [ 1.0 , 2.0 , 2.0 , - 7.0 , - 2.0 , 3.0 , 4.0 , 2.0 , NaN , NaN ] ;
85+ var N = floor ( x . length / 2 ) ;
86+ var v = nanminabs ( N , x , 2 , 0 ) ;
11887 t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
11988 t . end ( ) ;
12089} ) ;
12190
122- tape ( 'the function supports a negative `stride` parameter' , function test ( t ) {
123- var N ;
124- var x ;
125- var v ;
126-
127- x = [
128- NaN , // 4
129- NaN ,
130- 1.0 , // 3
131- 2.0 ,
132- 2.0 , // 2
133- - 7.0 ,
134- - 2.0 , // 1
135- 3.0 ,
136- 4.0 , // 0
137- 2.0
138- ] ;
139-
140- N = floor ( x . length / 2 ) ;
141- v = nanminabs ( N , x , - 2 , 8 ) ;
142-
91+ tape ( 'the function supports a negative stride parameter' , function test ( t ) {
92+ var x = [ NaN , NaN , 1.0 , 2.0 , 2.0 , - 7.0 , - 2.0 , 3.0 , 4.0 , 2.0 ] ;
93+ var N = floor ( x . length / 2 ) ;
94+ var v = nanminabs ( N , x , - 2 , 8 ) ;
14395 t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
14496 t . end ( ) ;
14597} ) ;
14698
147- tape ( 'if provided a `stride` parameter equal to `0`, the function returns the first indexed element' , function test ( t ) {
148- var x ;
149- var v ;
150-
151- x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
152-
153- v = nanminabs ( x . length , x , 0 , 0 ) ;
154- t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
155-
99+ tape ( 'if stride = 0, the function returns the first indexed element' , function test ( t ) {
100+ var x = [ 1.0 , - 2.0 , - 4.0 , 5.0 , 3.0 ] ;
101+ t . strictEqual ( nanminabs ( x . length , x , 0 , 0 ) , 1.0 , 'returns expected value' ) ;
156102 t . end ( ) ;
157103} ) ;
158104
159- tape ( 'the function supports an `offset` parameter' , function test ( t ) {
160- var N ;
161- var x ;
162- var v ;
163-
164- x = [
165- 2.0 ,
166- 1.0 , // 0
167- 2.0 ,
168- - 2.0 , // 1
169- - 2.0 ,
170- 2.0 , // 2
171- 3.0 ,
172- 4.0 , // 3
173- NaN ,
174- NaN // 4
175- ] ;
176- N = floor ( x . length / 2 ) ;
177-
178- v = nanminabs ( N , x , 2 , 1 ) ;
105+ tape ( 'the function supports an offset parameter' , function test ( t ) {
106+ var x = [ 2.0 , 1.0 , 2.0 , - 2.0 , - 2.0 , 2.0 , 3.0 , 4.0 , NaN , NaN ] ;
107+ var N = floor ( x . length / 2 ) ;
108+ var v = nanminabs ( N , x , 2 , 1 ) ;
179109 t . strictEqual ( v , 1.0 , 'returns expected value' ) ;
110+ t . end ( ) ;
111+ } ) ;
180112
113+ tape ( 'the function handles large arrays efficiently' , function test ( t ) {
114+ var x = new Array ( 1e6 ) . fill ( NaN ) ;
115+ x [ 500 ] = - 3.0 ;
116+ x [ 750000 ] = 2.0 ;
117+ var v = nanminabs ( x . length , x , 1 , 0 ) ;
118+ t . strictEqual ( v , 2.0 , 'returns expected value' ) ;
181119 t . end ( ) ;
182120} ) ;
0 commit comments