Skip to content

Commit 32db8e9

Browse files
committed
feat: add tests
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent 7b547ff commit 32db8e9

File tree

5 files changed

+1566
-0
lines changed

5 files changed

+1566
-0
lines changed
Lines changed: 342 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,342 @@
1+
/**
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2025 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
'use strict';
20+
21+
// MODULES //
22+
23+
var tape = require( 'tape' );
24+
var Float64Results = require( '@stdlib/stats/base/ztest/two-sample/results/float64' );
25+
var isfinite = require( '@stdlib/math/base/assert/is-finite' );
26+
var isnan = require( '@stdlib/math/base/assert/is-nan' );
27+
var dfill = require( '@stdlib/blas/ext/base/dfill' ).ndarray;
28+
var normalFactory = require( '@stdlib/random/array/normal' ).factory;
29+
var PINF = require( '@stdlib/constants/float64/pinf' );
30+
var NINF = require( '@stdlib/constants/float64/ninf' );
31+
var dztest2 = require( './../lib/dztest2.js' );
32+
33+
34+
// VARIABLES //
35+
36+
var normal = normalFactory({
37+
'seed': 12345
38+
});
39+
40+
41+
// TESTS //
42+
43+
tape( 'main export is a function', function test( t ) {
44+
t.ok( true, __filename );
45+
t.strictEqual( typeof dztest2, 'function', 'main export is a function' );
46+
t.end();
47+
});
48+
49+
tape( 'the function performs a two-sample Z-test over strided arrays (alternative=two-sided)', function test( t ) {
50+
var results;
51+
var out;
52+
var x;
53+
var y;
54+
55+
results = new Float64Results();
56+
57+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
58+
x = normal( 10000, 0.0, 1.0, {
59+
'dtype': 'float64'
60+
});
61+
y = normal( 10000, 0.0, 1.0, {
62+
'dtype': 'float64'
63+
});
64+
65+
out = dztest2( x.length, y.length, 'two-sided', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
66+
t.strictEqual( out, results, 'returns expected value' );
67+
t.strictEqual( out.rejected, false, 'returns expected value' );
68+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
69+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
70+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
71+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
72+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
73+
74+
out = dztest2( x.length, y.length, 'two-sided', 0.1, 100.0, 1.0, x, 1, 1.0, y, 1, results );
75+
t.strictEqual( out, results, 'returns expected value' );
76+
t.strictEqual( out.rejected, true, 'returns expected value' );
77+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
78+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
79+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
80+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
81+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
82+
83+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
84+
x = normal( 10000, 4.0, 1.0, {
85+
'dtype': 'float64'
86+
});
87+
y = normal( 10000, 2.0, 1.0, {
88+
'dtype': 'float64'
89+
});
90+
91+
out = dztest2( x.length, y.length, 'two-sided', 0.1, 2.0, 1.0, x, 1, 1.0, y, 1, results );
92+
t.strictEqual( out, results, 'returns expected value' );
93+
t.strictEqual( out.rejected, true, 'returns expected value' );
94+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
95+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
96+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
97+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
98+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
99+
100+
t.end();
101+
});
102+
103+
tape( 'the function performs a two-sample Z-test over strided arrays (alternative=greater)', function test( t ) {
104+
var results;
105+
var out;
106+
var x;
107+
var y;
108+
109+
results = new Float64Results();
110+
111+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
112+
x = normal( 10000, 0.0, 1.0, {
113+
'dtype': 'float64'
114+
});
115+
y = normal( 10000, 2.0, 1.0, {
116+
'dtype': 'float64'
117+
});
118+
119+
out = dztest2( x.length, y.length, 'greater', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
120+
t.strictEqual( out, results, 'returns expected value' );
121+
t.strictEqual( out.rejected, false, 'returns expected value' );
122+
t.strictEqual( out.alternative, 'greater', 'returns expected value' );
123+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
124+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
125+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
126+
t.strictEqual( out.ci[ 1 ], PINF, 'returns expected value' );
127+
128+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
129+
x = normal( 10000, 0.0, 1.0, {
130+
'dtype': 'float64'
131+
});
132+
y = normal( 10000, 0.0, 1.0, {
133+
'dtype': 'float64'
134+
});
135+
136+
out = dztest2( x.length, y.length, 'greater', 0.1, -1.0, 1.0, x, 1, 1.0, y, 1, results );
137+
t.strictEqual( out, results, 'returns expected value' );
138+
t.strictEqual( out.rejected, true, 'returns expected value' );
139+
t.strictEqual( out.alternative, 'greater', 'returns expected value' );
140+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
141+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
142+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
143+
t.strictEqual( out.ci[ 1 ], PINF, 'returns expected value' );
144+
145+
t.end();
146+
});
147+
148+
tape( 'the function performs a two-sample Z-test over strided arrays (alternative=less)', function test( t ) {
149+
var results;
150+
var out;
151+
var x;
152+
var y;
153+
154+
results = new Float64Results();
155+
156+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
157+
x = normal( 10000, 2.0, 1.0, {
158+
'dtype': 'float64'
159+
});
160+
y = normal( 10000, 0.0, 1.0, {
161+
'dtype': 'float64'
162+
});
163+
164+
out = dztest2( x.length, y.length, 'less', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
165+
t.strictEqual( out, results, 'returns expected value' );
166+
t.strictEqual( out.rejected, false, 'returns expected value' );
167+
t.strictEqual( out.alternative, 'less', 'returns expected value' );
168+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
169+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
170+
t.strictEqual( out.ci[ 0 ], NINF, 'returns expected value' );
171+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
172+
173+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
174+
x = normal( 10000, 0.0, 1.0, {
175+
'dtype': 'float64'
176+
});
177+
y = normal( 10000, 0.0, 1.0, {
178+
'dtype': 'float64'
179+
});
180+
181+
out = dztest2( x.length, y.length, 'less', 0.1, 1.0, 1.0, x, 1, 1.0, y, 1, results );
182+
t.strictEqual( out, results, 'returns expected value' );
183+
t.strictEqual( out.rejected, true, 'returns expected value' );
184+
t.strictEqual( out.alternative, 'less', 'returns expected value' );
185+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
186+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
187+
t.strictEqual( out.ci[ 0 ], NINF, 'returns expected value' );
188+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
189+
190+
t.end();
191+
});
192+
193+
tape( 'if provided an `NX` or `NY` parameter less than or equal to `0`, the function returns `NaN` results', function test( t ) {
194+
var results;
195+
var out;
196+
var x;
197+
var y;
198+
199+
results = new Float64Results();
200+
x = normal( 10, 0.0, 1.0, {
201+
'dtype': 'float64'
202+
});
203+
y = normal( 10, 0.0, 1.0, {
204+
'dtype': 'float64'
205+
});
206+
207+
out = dztest2( 0, y.length, 'two-sided', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
208+
t.strictEqual( out, results, 'returns expected value' );
209+
t.strictEqual( out.rejected, false, 'returns expected value' );
210+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
211+
t.strictEqual( isnan( out.statistic ), true, 'returns expected value' );
212+
t.strictEqual( isnan( out.pValue ), true, 'returns expected value' );
213+
214+
out = dztest2( -1, y.length, 'two-sided', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
215+
t.strictEqual( out, results, 'returns expected value' );
216+
t.strictEqual( out.rejected, false, 'returns expected value' );
217+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
218+
t.strictEqual( isnan( out.statistic ), true, 'returns expected value' );
219+
t.strictEqual( isnan( out.pValue ), true, 'returns expected value' );
220+
221+
out = dztest2( x.length, 0, 'two-sided', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
222+
t.strictEqual( out, results, 'returns expected value' );
223+
t.strictEqual( out.rejected, false, 'returns expected value' );
224+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
225+
t.strictEqual( isnan( out.statistic ), true, 'returns expected value' );
226+
t.strictEqual( isnan( out.pValue ), true, 'returns expected value' );
227+
228+
out = dztest2( x.length, -1, 'two-sided', 0.1, 0.0, 1.0, x, 1, 1.0, y, 1, results );
229+
t.strictEqual( out, results, 'returns expected value' );
230+
t.strictEqual( out.rejected, false, 'returns expected value' );
231+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
232+
t.strictEqual( isnan( out.statistic ), true, 'returns expected value' );
233+
t.strictEqual( isnan( out.pValue ), true, 'returns expected value' );
234+
235+
t.end();
236+
});
237+
238+
tape( 'the function supports a stride parameter', function test( t ) {
239+
var results;
240+
var out;
241+
var x;
242+
var y;
243+
var N;
244+
245+
N = 10000;
246+
results = new Float64Results();
247+
248+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
249+
x = normal( N*2, 0.0, 1.0, {
250+
'dtype': 'float64'
251+
});
252+
y = normal( N*2, 0.0, 1.0, {
253+
'dtype': 'float64'
254+
});
255+
256+
dfill( N, NaN, x, 2, 1 );
257+
dfill( N, NaN, y, 2, 1 );
258+
259+
out = dztest2( N, N, 'two-sided', 0.1, 0.0, 1.0, x, 2, 1.0, y, 2, results );
260+
t.strictEqual( out, results, 'returns expected value' );
261+
t.strictEqual( out.rejected, false, 'returns expected value' );
262+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
263+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
264+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
265+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
266+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
267+
268+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
269+
x = normal( N*2, 4.0, 1.0, {
270+
'dtype': 'float64'
271+
});
272+
y = normal( N*2, 2.0, 1.0, {
273+
'dtype': 'float64'
274+
});
275+
276+
dfill( N, NaN, x, 2, 1 );
277+
dfill( N, NaN, y, 2, 1 );
278+
279+
out = dztest2( N, N, 'two-sided', 0.1, 10.0, 1.0, x, 2, 1.0, y, 2, results );
280+
t.strictEqual( out, results, 'returns expected value' );
281+
t.strictEqual( out.rejected, true, 'returns expected value' );
282+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
283+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
284+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
285+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
286+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
287+
288+
t.end();
289+
});
290+
291+
tape( 'the function supports a negative stride parameter', function test( t ) {
292+
var results;
293+
var out;
294+
var x;
295+
var y;
296+
var N;
297+
298+
N = 10000;
299+
results = new Float64Results();
300+
301+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
302+
x = normal( N*2, 0.0, 1.0, {
303+
'dtype': 'float64'
304+
});
305+
y = normal( N*2, 0.0, 1.0, {
306+
'dtype': 'float64'
307+
});
308+
309+
dfill( N, NaN, x, 2, 1 );
310+
dfill( N, NaN, y, 2, 1 );
311+
312+
out = dztest2( N, N, 'two-sided', 0.1, 0.0, 1.0, x, -2, 1.0, y, -2, results );
313+
t.strictEqual( out, results, 'returns expected value' );
314+
t.strictEqual( out.rejected, false, 'returns expected value' );
315+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
316+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
317+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
318+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
319+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
320+
321+
// Generate arrays with a sufficiently large sample size to effectively guarantee expected results:
322+
x = normal( N*2, 100.0, 1.0, {
323+
'dtype': 'float64'
324+
});
325+
y = normal( N*2, 100.0, 1.0, {
326+
'dtype': 'float64'
327+
});
328+
329+
dfill( N, NaN, x, 2, 1 );
330+
dfill( N, NaN, y, 2, 1 );
331+
332+
out = dztest2( N, N, 'two-sided', 0.1, 0.0, 1.0, x, -2, 1.0, y, -2, results );
333+
t.strictEqual( out, results, 'returns expected value' );
334+
t.strictEqual( out.rejected, true, 'returns expected value' );
335+
t.strictEqual( out.alternative, 'two-sided', 'returns expected value' );
336+
t.strictEqual( isnan( out.statistic ), false, 'returns expected value' );
337+
t.strictEqual( isnan( out.pValue ), false, 'returns expected value' );
338+
t.strictEqual( isfinite( out.ci[ 0 ] ), true, 'returns expected value' );
339+
t.strictEqual( isfinite( out.ci[ 1 ] ), true, 'returns expected value' );
340+
341+
t.end();
342+
});

0 commit comments

Comments
 (0)