diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index c4bab06..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-10-01T03:46:01.639Z diff --git a/package.json b/package.json index 7be408c..2b1676b 100644 --- a/package.json +++ b/package.json @@ -37,19 +37,19 @@ "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/assert-is-function": "^0.1.1", + "@stdlib/assert-is-iterator-like": "^0.1.1", "@stdlib/assert-is-positive-integer": "^0.1.0", "@stdlib/stats-incr-mprod": "^0.1.0", - "@stdlib/string-format": "^0.1.0", + "@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", diff --git a/test/dist/test.js b/test/dist/test.js index b7e325c..a8a9c60 100644 --- a/test/dist/test.js +++ b/test/dist/test.js @@ -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. @@ -21,289 +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 itermprod = 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 itermprod, '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() { - itermprod( value, 3 ); - }; - } -}); - -tape( 'the function throws an error if provided a second argument which is not a positive integer', function test( t ) { - var values; - var i; - - values = [ - '5', - -5, - 0, - 3.14, - NaN, - true, - false, - null, - void 0, - [], - {} - ]; - - 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() { - itermprod( randu(), value ); - }; - } -}); - -tape( 'the function returns an iterator protocol-compliant object which iteratively computes a moving product', 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 = [ 2.0, 6.0, 12.0, 24.0, 24.0, 48.0 ]; - - it = itermprod( array2iterator( values ), 3 ); - 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 product is `NaN` for at least `W` invocations', function test( t ) { - var expected; - var values; - var it; - var v; - var i; - - values = [ - NaN, // NaN - 3.0, // NaN, 3.0 - 3.0, // NaN, 3.0, 3.0 - 'beep', // 3.0, 3.0, 'beep' - 3.0, // 3.0, 'beep', 3.0 - 3.0, // 'beep', 3.0, 3.0 - 3.0, // 3.0, 3.0, 3.0 - NaN, // 3.0, 3.0, NaN - 3.0, // 3.0, NaN, 3.0 - 3.0, // NaN, 3.0, 3.0 - 3.0, // 3.0, 3.0, 3.0 - NaN, // 3.0, 3.0, NaN - 3.0, // 3.0, NaN, 3.0 - 3.0, // NaN, 3.0, 3.0 - NaN, // 3.0, 3.0, NaN - NaN, // 3.0, NaN, NaN - NaN, // NaN, NaN, NaN - NaN, // NaN, NaN, NaN - 3.0 // NaN, NaN, 3.0 - ]; - - expected = [ - NaN, - NaN, - NaN, - NaN, - NaN, - NaN, - 27.0, - NaN, - NaN, - NaN, - 27.0, - NaN, - NaN, - NaN, - NaN, - NaN, - NaN, - NaN, - NaN - ]; - - it = itermprod( array2iterator( values ), 3 ); - - for ( i = 0; i < values.length; i++ ) { - v = it.next(); - if ( isnan( expected[ i ] ) ) { - t.equal( isnan( v.value ), true, 'returns expected value for window '+i ); - } else { - t.equal( v.value, expected[ i ], 'returns expected value for window '+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 = itermprod( randu(), 3 ); - - 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 = itermprod( randu(), 3 ); - - 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 itermprod; - var opts; - var rand; - var it1; - var it2; - var i; - - itermprod = proxyquire( './../dist/main.js', { - '@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__' - }); - - opts = { - 'seed': 12345 - }; - rand = randu( opts ); - rand[ '__ITERATOR_SYMBOL__' ] = factory; - - it1 = itermprod( rand, 3 ); - 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 itermprod; - var it; - - itermprod = proxyquire( './../dist/main.js', { - '@stdlib/symbol-iterator': false - }); - - it = itermprod( randu(), 3 ); - 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 itermprod; - var rand; - var it; - - itermprod = proxyquire( './../dist/main.js', { - '@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__' - }); - - rand = randu(); - rand[ '__ITERATOR_SYMBOL__' ] = null; - - it = itermprod( rand, 3 ); - t.equal( it[ iteratorSymbol ], void 0, 'does not have property' ); - + t.strictEqual( main !== void 0, true, 'main export is defined' ); t.end(); });