Skip to content

Commit d0f93fa

Browse files
committed
test: added test, test.native, runner
--- 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: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent c398869 commit d0f93fa

File tree

4 files changed

+710
-4
lines changed

4 files changed

+710
-4
lines changed

lib/node_modules/@stdlib/math/base/special/kernel-betainc/test/fixtures/cpp/output.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/kernel-betainc/test/fixtures/cpp/runner.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,8 @@ void generate( double *x, double *a, double *b, const unsigned int len, const ch
334334
lower_unregularized[ i ] = boost::math::beta( arg1, arg2, arg3 );
335335
upper_unregularized[ i ] = boost::math::betac( arg1, arg2, arg3 );
336336
derivative_regularized[ i ] = boost::math::ibeta_derivative( arg1, arg2, arg3 );
337-
derivative_unregularized[i] = derivative_regularized[i] * boost::math::beta(arg1, arg2);
337+
// NOTE: `kernel-betainc` currently returns the regularized derivative
338+
derivative_unregularized[ i ] = derivative_regularized[ i ];
338339
}
339340
// Open a new file:
340341
f = fopen( name, "w" );

lib/node_modules/@stdlib/math/base/special/kernel-betainc/test/test.js

Lines changed: 288 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,26 @@
2323
var tape = require( 'tape' );
2424
var isNaNArray = require( '@stdlib/assert/is-nan-array' );
2525
var isArray = require( '@stdlib/assert/is-array' );
26+
var abs = require( '@stdlib/math/base/special/abs' );
27+
var sqrt = require( '@stdlib/math/base/special/sqrt' );
28+
var EPS = require( '@stdlib/constants/float64/eps' );
29+
var PI = require( '@stdlib/constants/float64/pi' );
2630
var kernelBetainc = require( './../lib' );
2731

2832

33+
// FIXTURES //
34+
35+
var fixtures = require( './fixtures/cpp/output.json' );
36+
var lowerRegularized = fixtures.lower_regularized;
37+
var lowerUnregularized = fixtures.lower_unregularized;
38+
var upperRegularized = fixtures.upper_regularized;
39+
var upperUnregularized = fixtures.upper_unregularized;
40+
var derivativeRegularized = fixtures.derivative_regularized;
41+
var x = fixtures.x;
42+
var a = fixtures.a;
43+
var b = fixtures.b;
44+
45+
2946
// TESTS //
3047

3148
tape( 'main export is a function', function test( t ) {
@@ -68,7 +85,34 @@ tape( 'the function returns `[ NaN, NaN ]` if `x` is `NaN`', function test( t )
6885
t.end();
6986
});
7087

71-
tape( 'the function returns `[ NaN, NaN ]` if negative `a` or `b`', function test( t ) {
88+
tape( 'the function returns `[ NaN, NaN ]` if `a` or `b` is `NaN`', function test( t ) {
89+
var val = kernelBetainc( 0.5, NaN, 1.0, true, true );
90+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
91+
92+
val = kernelBetainc( 0.5, NaN, 1.0, true, false );
93+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
94+
95+
val = kernelBetainc( 0.5, NaN, 1.0, false, true );
96+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
97+
98+
val = kernelBetainc( 0.5, NaN, 1.0, false, false );
99+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
100+
101+
val = kernelBetainc( 0.5, 1.0, NaN, true, true );
102+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
103+
104+
val = kernelBetainc( 0.5, 1.0, NaN, true, false );
105+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
106+
107+
val = kernelBetainc( 0.5, 1.0, NaN, false, true );
108+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
109+
110+
val = kernelBetainc( 0.5, 1.0, NaN, false, false );
111+
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
112+
t.end();
113+
});
114+
115+
tape( 'the function returns `[ NaN, NaN ]` if `a` or `b` is negative', function test( t ) {
72116
var val = kernelBetainc( 0.5, -1.0, 1.0, true, true );
73117
t.strictEqual( isNaNArray( val ), true, 'returns expected value' );
74118

@@ -122,4 +166,246 @@ tape( 'attached to the function is a method which supports supplying a destinati
122166
t.end();
123167
});
124168

125-
// TODO: Add fixtures
169+
tape( 'the function returns expected endpoint values and regularized derivatives when `x` is `0`', function test( t ) {
170+
var val;
171+
172+
val = kernelBetainc( 0.0, 1.0, 2.0, true, false );
173+
t.strictEqual( val[ 0 ], 0.0, 'returns expected value for lower regularized endpoint' );
174+
t.strictEqual( val[ 1 ], 1.0, 'returns expected regularized derivative for lower regularized endpoint' );
175+
176+
val = kernelBetainc( 0.0, 1.0, 2.0, true, true );
177+
t.strictEqual( val[ 0 ], 1.0, 'returns expected value for upper regularized endpoint' );
178+
t.strictEqual( val[ 1 ], 1.0, 'returns expected regularized derivative for upper regularized endpoint' );
179+
180+
val = kernelBetainc( 0.0, 1.0, 2.0, false, false );
181+
t.strictEqual( val[ 0 ], 0.0, 'returns expected value for lower unregularized endpoint' );
182+
183+
val = kernelBetainc( 0.0, 1.0, 2.0, false, true );
184+
t.strictEqual( val[ 0 ], 0.5, 'returns expected value for upper unregularized endpoint' );
185+
186+
t.end();
187+
});
188+
189+
tape( 'the function returns expected endpoint values and regularized derivatives when `x` is `1`', function test( t ) {
190+
var val;
191+
192+
val = kernelBetainc( 1.0, 2.0, 1.0, true, false );
193+
t.strictEqual( val[ 0 ], 1.0, 'returns expected value for lower regularized endpoint' );
194+
t.strictEqual( val[ 1 ], 1.0, 'returns expected regularized derivative for lower regularized endpoint' );
195+
196+
val = kernelBetainc( 1.0, 2.0, 1.0, true, true );
197+
t.strictEqual( val[ 0 ], 0.0, 'returns expected value for upper regularized endpoint' );
198+
t.strictEqual( val[ 1 ], 1.0, 'returns expected regularized derivative for upper regularized endpoint' );
199+
200+
val = kernelBetainc( 1.0, 2.0, 1.0, false, false );
201+
t.strictEqual( val[ 0 ], 0.5, 'returns expected value for lower unregularized endpoint' );
202+
203+
val = kernelBetainc( 1.0, 2.0, 1.0, false, true );
204+
t.strictEqual( val[ 0 ], 0.0, 'returns expected value for upper unregularized endpoint' );
205+
206+
t.end();
207+
});
208+
209+
tape( 'the function handles the `a=0.5` and `b=0.5` branch', function test( t ) {
210+
var expected;
211+
var delta;
212+
var tol;
213+
var val;
214+
215+
val = kernelBetainc( 0.25, 0.5, 0.5, true, false );
216+
expected = 1.0 / 3.0;
217+
delta = abs( val[ 0 ] - expected );
218+
tol = 50.0 * EPS * abs( expected );
219+
t.ok( delta <= tol, 'returns expected lower regularized value. Δ: '+delta+'. tol: '+tol );
220+
221+
expected = sqrt( 3.0 ) / ( 4.0 * PI );
222+
delta = abs( val[ 1 ] - expected );
223+
tol = 50.0 * EPS * abs( expected );
224+
t.ok( delta <= tol, 'returns expected regularized derivative for lower branch value. Δ: '+delta+'. tol: '+tol );
225+
226+
val = kernelBetainc( 0.25, 0.5, 0.5, true, true );
227+
expected = 2.0 / 3.0;
228+
delta = abs( val[ 0 ] - expected );
229+
tol = 50.0 * EPS * abs( expected );
230+
t.ok( delta <= tol, 'returns expected upper regularized value. Δ: '+delta+'. tol: '+tol );
231+
232+
expected = PI / 3.0;
233+
val = kernelBetainc( 0.25, 0.5, 0.5, false, false );
234+
delta = abs( val[ 0 ] - expected );
235+
tol = 50.0 * EPS * abs( expected );
236+
t.ok( delta <= tol, 'returns expected lower unregularized value. Δ: '+delta+'. tol: '+tol );
237+
238+
expected = 2.0 * PI / 3.0;
239+
val = kernelBetainc( 0.25, 0.5, 0.5, false, true );
240+
delta = abs( val[ 0 ] - expected );
241+
tol = 50.0 * EPS * abs( expected );
242+
t.ok( delta <= tol, 'returns expected upper unregularized value. Δ: '+delta+'. tol: '+tol );
243+
244+
t.end();
245+
});
246+
247+
tape( 'the function handles the `b=1` branch', function test( t ) {
248+
var val;
249+
250+
val = kernelBetainc( 0.25, 2.0, 1.0, true, false );
251+
t.strictEqual( val[ 0 ], 0.0625, 'returns expected lower regularized value' );
252+
t.strictEqual( val[ 1 ], 0.5, 'returns expected regularized derivative for lower regularized value' );
253+
254+
val = kernelBetainc( 0.25, 2.0, 1.0, true, true );
255+
t.strictEqual( val[ 0 ], 0.9375, 'returns expected upper regularized value' );
256+
t.strictEqual( val[ 1 ], 0.5, 'returns expected regularized derivative for upper regularized value' );
257+
258+
val = kernelBetainc( 0.25, 2.0, 1.0, false, false );
259+
t.strictEqual( val[ 0 ], 0.03125, 'returns expected lower unregularized value' );
260+
261+
val = kernelBetainc( 0.25, 2.0, 1.0, false, true );
262+
t.strictEqual( val[ 0 ], 0.46875, 'returns expected upper unregularized value' );
263+
264+
t.end();
265+
});
266+
267+
tape( 'the function handles the `a=1` branch', function test( t ) {
268+
var val;
269+
270+
val = kernelBetainc( 0.25, 1.0, 2.0, true, false );
271+
t.strictEqual( val[ 0 ], 0.4375, 'returns expected lower regularized value' );
272+
t.strictEqual( val[ 1 ], 1.5, 'returns expected regularized derivative for lower regularized value' );
273+
274+
val = kernelBetainc( 0.25, 1.0, 2.0, true, true );
275+
t.strictEqual( val[ 0 ], 0.5625, 'returns expected upper regularized value' );
276+
t.strictEqual( val[ 1 ], 1.5, 'returns expected regularized derivative for upper regularized value' );
277+
278+
val = kernelBetainc( 0.25, 1.0, 2.0, false, false );
279+
t.strictEqual( val[ 0 ], 0.21875, 'returns expected lower unregularized value' );
280+
281+
val = kernelBetainc( 0.25, 1.0, 2.0, false, true );
282+
t.strictEqual( val[ 0 ], 0.28125, 'returns expected upper unregularized value' );
283+
284+
t.end();
285+
});
286+
287+
tape( 'the function evaluates the lower regularized incomplete beta function', function test( t ) {
288+
var expected;
289+
var delta;
290+
var tol;
291+
var i;
292+
var y;
293+
294+
expected = lowerRegularized;
295+
for ( i = 0; i < x.length; i++ ) {
296+
y = kernelBetainc( x[i], a[i], b[i], true, false )[0];
297+
if ( y === expected[i] ) {
298+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
299+
} else {
300+
delta = abs( y - expected[ i ] );
301+
tol = 50.0 * EPS * abs( expected[ i ] );
302+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
303+
}
304+
}
305+
t.end();
306+
});
307+
308+
tape( 'the function evaluates the lower unregularized incomplete beta function', function test( t ) {
309+
var expected;
310+
var delta;
311+
var tol;
312+
var i;
313+
var y;
314+
315+
expected = lowerUnregularized;
316+
for ( i = 0; i < x.length; i++ ) {
317+
y = kernelBetainc( x[i], a[i], b[i], false, false )[0];
318+
if ( y === expected[i] ) {
319+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
320+
} else {
321+
delta = abs( y - expected[ i ] );
322+
tol = 90.0 * EPS * abs( expected[ i ] );
323+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
324+
}
325+
}
326+
t.end();
327+
});
328+
329+
tape( 'the function evaluates the upper regularized incomplete beta function', function test( t ) {
330+
var expected;
331+
var delta;
332+
var tol;
333+
var i;
334+
var y;
335+
336+
expected = upperRegularized;
337+
for ( i = 0; i < x.length; i++ ) {
338+
y = kernelBetainc( x[i], a[i], b[i], true, true )[0];
339+
if ( y === expected[i] ) {
340+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
341+
} else {
342+
delta = abs( y - expected[ i ] );
343+
tol = 55.0 * EPS * abs( expected[ i ] );
344+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
345+
}
346+
}
347+
t.end();
348+
});
349+
350+
tape( 'the function evaluates the upper unregularized incomplete beta function', function test( t ) {
351+
var expected;
352+
var delta;
353+
var tol;
354+
var i;
355+
var y;
356+
357+
expected = upperUnregularized;
358+
for ( i = 0; i < x.length; i++ ) {
359+
y = kernelBetainc( x[i], a[i], b[i], false, true )[0];
360+
if ( y === expected[i] ) {
361+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
362+
} else {
363+
delta = abs( y - expected[ i ] );
364+
tol = 70.0 * EPS * abs( expected[ i ] );
365+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
366+
}
367+
}
368+
t.end();
369+
});
370+
371+
tape( 'the function evaluates the lower derivative regularized incomplete beta function', function test( t ) {
372+
var expected;
373+
var delta;
374+
var tol;
375+
var i;
376+
var y;
377+
378+
expected = derivativeRegularized;
379+
for ( i = 0; i < x.length; i++ ) {
380+
y = kernelBetainc( x[i], a[i], b[i], true, false )[1];
381+
if ( y === expected[i] ) {
382+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
383+
} else {
384+
delta = abs( y - expected[ i ] );
385+
tol = 650.0 * EPS * abs( expected[ i ] );
386+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
387+
}
388+
}
389+
t.end();
390+
});
391+
392+
tape( 'the function evaluates the upper derivative regularized incomplete beta function', function test( t ) {
393+
var expected;
394+
var delta;
395+
var tol;
396+
var i;
397+
var y;
398+
399+
expected = derivativeRegularized;
400+
for ( i = 0; i < x.length; i++ ) {
401+
y = kernelBetainc( x[i], a[i], b[i], true, true )[1];
402+
if ( y === expected[i] ) {
403+
t.strictEqual( y, expected[i], 'x: '+x[i]+', y: '+y+'. a: '+a[i]+'. b: '+b[i]+', expected: '+expected[i] );
404+
} else {
405+
delta = abs( y - expected[ i ] );
406+
tol = 650.0 * EPS * abs( expected[ i ] );
407+
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. a: '+a[i]+'. b: '+b[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
408+
}
409+
}
410+
t.end();
411+
});

0 commit comments

Comments
 (0)