Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 31 additions & 26 deletions lib/node_modules/@stdlib/stats/incr/nancovariance/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@
// MODULES //

var tape = require( 'tape' );
var abs = require( '@stdlib/math/base/special/abs' );
var EPS = require( '@stdlib/constants/float64/eps' );
var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' );
var incrnancovariance = require( './../lib' );


Expand All @@ -36,17 +35,17 @@ tape( 'main export is a function', function test( t ) {

tape( 'the function returns an accumulator function', function test( t ) {
var acc = incrnancovariance();
t.strictEqual( typeof acc, 'function', 'returns a function' );
t.strictEqual( typeof acc, 'function', 'returns expected value' );
t.end();
});

tape( 'the accumulator function returns null if no valid pairs have been provided', function test( t ) {
var acc = incrnancovariance();
t.equal( acc(), null, 'returns null initially' );
t.strictEqual( acc(), null, 'returns expected value' );

// Provide an invalid pair:
acc( NaN, 5.0 );
t.equal( acc(), null, 'still null after invalid pair' );
t.strictEqual( acc(), null, 'returns expected value' );
t.end();
});

Expand All @@ -55,71 +54,77 @@ tape( 'the accumulator function returns null if only one valid pair has been pro

// Add the first valid pair:
acc( 2.0, 1.0 );
t.equal( acc(), null, 'returns null for single valid pair' );
t.strictEqual( acc(), null, 'returns expected value' );
t.end();
});

tape( 'the accumulator function computes sample covariance once two valid pairs have been provided', function test( t ) {
var acc = incrnancovariance();
var acc;
var cov;

acc = incrnancovariance();

// Pair #1:
cov = acc( 2.0, 1.0 );
t.equal( cov, null, 'still null with only one valid pair' );
t.strictEqual( cov, null, 'returns expected value' );

// Pair #2:
cov = acc( 4.0, 5.0 );
t.equal( cov, 4.0, 'returns sample covariance after second valid pair' );
t.strictEqual( cov, 4.0, 'returns expected value' );

// Current covariance with no arguments:
t.equal( acc(), 4.0, 'returns current covariance' );
t.strictEqual( acc(), 4.0, 'returns expected value' );
t.end();
});

tape( 'the accumulator function skips pairs containing NaN', function test( t ) {
var acc = incrnancovariance();
var acc;
var cov;

acc = incrnancovariance();

// Provide first valid pair:
cov = acc( 2.0, 1.0 );
t.equal( cov, null, 'null with only one valid pair' );
t.strictEqual( cov, null, 'returns expected value' );

// Invalid pair => skip:
cov = acc( NaN, 10.0 );
t.equal( cov, null, 'still null, as second pair is invalid' );
t.strictEqual( cov, null, 'returns expected value' );

// Provide second valid pair:
cov = acc( 2.0, 5.0 );

// For (2,1) and (2,5): same X => covariance=0
t.equal( cov, 0.0, 'returns 0.0 for these pairs' );
t.strictEqual( cov, 0.0, 'returns expected value' );

// Provide third valid pair:
cov = acc( 5.0, 9.0 );
t.equal( typeof cov, 'number', 'returns a number after third valid pair' );
t.strictEqual( typeof cov, 'number', 'returns expected value' );
t.end();
});

tape( 'the accumulator function computes correct covariance for multiple valid pairs interspersed with invalid pairs', function test( t ) {
var expected = 14.0/3.0;
var delta;
var data = [
var expected;
var data;
var acc;
var cov;
var i;

data = [
[ 2.0, 1.0 ],
[ NaN, 4.0 ],
[ 4.0, 5.0 ],
[ 3.0, 7.0 ],
[ NaN, NaN ],
[ 5.0, 11.0 ]
];
var acc = incrnancovariance();
var cov;
var tol;
var i;
acc = incrnancovariance();
for ( i = 0; i < data.length; i++ ) {
cov = acc( data[ i ][ 0 ], data[ i ][ 1 ] );
}
delta = abs( cov - expected );
tol = EPS * abs( expected );
t.equal( typeof cov, 'number', 'returns a number' );
t.ok( delta < tol, 'within tolerance. Actual: '+cov+'. Expected: '+expected+'. delta: '+delta+'. tol: '+tol+'.' );
t.strictEqual( typeof cov, 'number', 'returns expected value' );

expected = 14.0/3.0;
t.strictEqual( isAlmostSameValue( cov, expected, 0 ), true, 'returns expected value' );
t.end();
});
Loading