Skip to content

Commit

Permalink
Auto-generated commit
Browse files Browse the repository at this point in the history
  • Loading branch information
stdlib-bot committed Oct 5, 2023
1 parent a007760 commit 0aa9fbf
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 230 deletions.
1 change: 0 additions & 1 deletion .github/.keepalive

This file was deleted.

12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,18 @@
"url": "https://github.com/stdlib-js/stdlib/issues"
},
"dependencies": {
"@stdlib/assert-is-function": "^0.1.0",
"@stdlib/assert-is-iterator-like": "^0.1.0",
"@stdlib/stats-incr-sumabs2": "^0.1.0",
"@stdlib/string-format": "^0.1.0",
"@stdlib/assert-is-function": "^0.1.1",
"@stdlib/assert-is-iterator-like": "^0.1.1",
"@stdlib/stats-incr-sumabs2": "^0.1.1",
"@stdlib/string-format": "^0.1.1",
"@stdlib/symbol-iterator": "^0.1.0",
"@stdlib/types": "^0.1.0",
"@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.0"
"@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1"
},
"devDependencies": {
"@stdlib/array-to-iterator": "^0.1.0",
"@stdlib/bench": "^0.1.0",
"@stdlib/math-base-assert-is-nan": "^0.1.0",
"@stdlib/math-base-assert-is-nan": "^0.1.1",
"@stdlib/random-iter-randu": "^0.1.0",
"@stdlib/random-iter-uniform": "^0.1.0",
"proxyquire": "^2.0.0",
Expand Down
227 changes: 4 additions & 223 deletions test/dist/test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2019 The Stdlib Authors.
* Copyright (c) 2023 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -21,232 +21,13 @@
// MODULES //

var tape = require( 'tape' );
var proxyquire = require( 'proxyquire' );
var randu = require( '@stdlib/random-iter-randu' );
var array2iterator = require( '@stdlib/array-to-iterator' );
var iteratorSymbol = require( '@stdlib/symbol-iterator' );
var isnan = require( '@stdlib/math-base-assert-is-nan' );
var itercusumabs2 = require( './../../dist' );
var main = require( './../../dist' );


// TESTS //

tape( 'main export is a function', function test( t ) {
tape( 'main export is defined', function test( t ) {
t.ok( true, __filename );
t.strictEqual( typeof itercusumabs2, 'function', 'main export is a function' );
t.end();
});

tape( 'the function throws an error if provided an iterator argument which is not an iterator protocol-compliant object', function test( t ) {
var values;
var i;

values = [
'5',
5,
NaN,
true,
false,
null,
void 0,
{},
function noop() {}
];

for ( i = 0; i < values.length; i++ ) {
t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] );
}
t.end();

function badValue( value ) {
return function badValue() {
itercusumabs2( value );
};
}
});

tape( 'the function returns an iterator protocol-compliant object which iteratively computes a cumulative sum of squared absolute values', function test( t ) {
var expected;
var actual;
var values;
var it;
var v;
var i;

values = [ 2.0, -3.0, -2.0, 4.0, -3.0, 4.0 ];
expected = [ 4.0, 13.0, 17.0, 33.0, 42.0, 58.0 ];

it = itercusumabs2( array2iterator( values ) );
t.equal( it.next.length, 0, 'has zero arity' );

actual = [];
for ( i = 0; i < values.length; i++ ) {
v = it.next();
t.equal( typeof v.value, 'number', 'returns a number' );
t.equal( typeof v.done, 'boolean', 'returns a boolean' );
actual.push( v.value );
}
t.deepEqual( actual, expected, 'returns expected results' );

v = it.next();
t.equal( v.value, void 0, 'returns expected value' );
t.equal( v.done, true, 'returns expected value' );

t.end();
});

tape( 'if an iterated value is a non-numeric value, the computed sum is `NaN`', function test( t ) {
var expected;
var values;
var it;
var v;
var i;

values = [ 1.0, 2.0, NaN, 3.0 ];
expected = [ 1.0, 5.0, NaN, NaN ];

it = itercusumabs2( array2iterator( values ) );

for ( i = 0; i < values.length; i++ ) {
v = it.next();
if ( isnan( expected[ i ] ) ) {
t.equal( isnan( v.value ), true, 'returns expected value for iteration '+i );
} else {
t.equal( v.value, expected[ i ], 'returns expected value for iteration '+i );
}
}

values = [ 1.0, 2.0, 'beep', 3.0 ];
expected = [ 1.0, 5.0, NaN, NaN ];

it = itercusumabs2( array2iterator( values ) );

for ( i = 0; i < values.length; i++ ) {
v = it.next();
if ( isnan( expected[ i ] ) ) {
t.equal( isnan( v.value ), true, 'returns expected value for iteration '+i );
} else {
t.equal( v.value, expected[ i ], 'returns expected value for iteration '+i );
}
}
t.end();
});

tape( 'the returned iterator has a `return` method for closing an iterator (no argument)', function test( t ) {
var it;
var r;

it = itercusumabs2( randu() );

r = it.next();
t.equal( typeof r.value, 'number', 'returns a number' );
t.equal( r.done, false, 'returns expected value' );

r = it.next();
t.equal( typeof r.value, 'number', 'returns a number' );
t.equal( r.done, false, 'returns expected value' );

r = it.return();
t.equal( r.value, void 0, 'returns expected value' );
t.equal( r.done, true, 'returns expected value' );

r = it.next();
t.equal( r.value, void 0, 'returns expected value' );
t.equal( r.done, true, 'returns expected value' );

t.end();
});

tape( 'the returned iterator has a `return` method for closing an iterator (argument)', function test( t ) {
var it;
var r;

it = itercusumabs2( randu() );

r = it.next();
t.equal( typeof r.value, 'number', 'returns a number' );
t.equal( r.done, false, 'returns expected value' );

r = it.next();
t.equal( typeof r.value, 'number', 'returns a number' );
t.equal( r.done, false, 'returns expected value' );

r = it.return( 'finished' );
t.equal( r.value, 'finished', 'returns expected value' );
t.equal( r.done, true, 'returns expected value' );

r = it.next();
t.equal( r.value, void 0, 'returns expected value' );
t.equal( r.done, true, 'returns expected value' );

t.end();
});

tape( 'if an environment supports `Symbol.iterator` and the provided iterator is iterable, the returned iterator is iterable', function test( t ) {
var itercusumabs2;
var opts;
var rand;
var it1;
var it2;
var i;

itercusumabs2 = proxyquire( './../dist/main.js', {
'@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__'
});

opts = {
'seed': 12345
};
rand = randu( opts );
rand[ '__ITERATOR_SYMBOL__' ] = factory;

it1 = itercusumabs2( rand );
t.equal( typeof it1[ '__ITERATOR_SYMBOL__' ], 'function', 'has method' );
t.equal( it1[ '__ITERATOR_SYMBOL__' ].length, 0, 'has zero arity' );

it2 = it1[ '__ITERATOR_SYMBOL__' ]();
t.equal( typeof it2, 'object', 'returns an object' );
t.equal( typeof it2.next, 'function', 'has method' );
t.equal( typeof it2.return, 'function', 'has method' );

for ( i = 0; i < 100; i++ ) {
t.equal( it2.next().value, it1.next().value, 'returns expected value' );
}
t.end();

function factory() {
return randu( opts );
}
});

tape( 'if an environment does not support `Symbol.iterator`, the returned iterator is not "iterable"', function test( t ) {
var itercusumabs2;
var it;

itercusumabs2 = proxyquire( './../dist/main.js', {
'@stdlib/symbol-iterator': false
});

it = itercusumabs2( randu() );
t.equal( it[ iteratorSymbol ], void 0, 'does not have property' );

t.end();
});

tape( 'if a provided iterator is not iterable, the returned iterator is not iterable', function test( t ) {
var itercusumabs2;
var rand;
var it;

itercusumabs2 = proxyquire( './../dist/main.js', {
'@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__'
});

rand = randu();
rand[ '__ITERATOR_SYMBOL__' ] = null;

it = itercusumabs2( rand );
t.equal( it[ iteratorSymbol ], void 0, 'does not have property' );

t.strictEqual( main !== void 0, true, 'main export is defined' );
t.end();
});

0 comments on commit 0aa9fbf

Please sign in to comment.