diff --git a/.github/.keepalive b/.github/.keepalive deleted file mode 100644 index 9d93560..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2023-10-01T05:01:46.555Z diff --git a/package.json b/package.json index 6cebc9e..12b9dc1 100644 --- a/package.json +++ b/package.json @@ -37,24 +37,24 @@ "url": "https://github.com/stdlib-js/stdlib/issues" }, "dependencies": { - "@stdlib/assert-has-own-property": "^0.1.0", + "@stdlib/assert-has-own-property": "^0.1.1", "@stdlib/assert-is-integer": "^0.1.0", "@stdlib/assert-is-nonnegative-integer": "^0.1.0", - "@stdlib/assert-is-plain-object": "^0.1.0", + "@stdlib/assert-is-plain-object": "^0.1.1", "@stdlib/assert-is-positive-integer": "^0.1.0", - "@stdlib/assert-is-positive-number": "^0.1.0", + "@stdlib/assert-is-positive-number": "^0.1.1", "@stdlib/math-base-special-abs": "^0.1.0", "@stdlib/math-base-special-cospi": "^0.2.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/assert-is-iterator-like": "^0.1.0", + "@stdlib/assert-is-iterator-like": "^0.1.1", "@stdlib/bench": "^0.1.0", - "@stdlib/constants-float64-eps": "^0.1.0", - "@stdlib/math-base-assert-is-nan": "^0.1.0", + "@stdlib/constants-float64-eps": "^0.1.1", + "@stdlib/math-base-assert-is-nan": "^0.1.1", "proxyquire": "^2.0.0", "tape": "git+https://github.com/kgryte/tape.git#fix/globby", "istanbul": "^0.4.1", diff --git a/test/dist/test.js b/test/dist/test.js index dd47667..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,718 +21,13 @@ // MODULES // var tape = require( 'tape' ); -var proxyquire = require( 'proxyquire' ); -var iteratorSymbol = require( '@stdlib/symbol-iterator' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var cospi = require( '@stdlib/math-base-special-cospi' ); -var EPS = require( '@stdlib/constants-float64-eps' ); -var iterBartlettHannPulse = require( './../../dist' ); - - -// FUNCTIONS // - -function bartlettHann( t, A, T ) { - T -= 1; - return A * ( 0.62 - (0.48*abs( (t/T)-0.5) ) - (0.38*cospi( (2.0/T)*t) ) ); -} +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 iterBartlettHannPulse, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided a first argument which is not an 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() { - iterBartlettHannPulse( value ); - }; - } -}); - -tape( 'the function throws an error if provided an invalid option', function test( t ) { - var values; - var i; - - values = [ - '5', - -5, - 3.14, - 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() { - iterBartlettHannPulse({ - 'iter': value - }); - }; - } -}); - -tape( 'the function throws an error if provided a pulse duration which is greater than the pulse period', function test( t ) { - var values; - var i; - - values = [ - 5, - 6, - 7, - 8, - 9, - 10 - ]; - - for ( i = 0; i < values.length; i++ ) { - t.throws( badValue( values[i] ), RangeError, 'throws an error when provided '+values[i] ); - } - t.end(); - - function badValue( value ) { - return function badValue() { - iterBartlettHannPulse({ - 'duration': value, - 'period': 4 - }); - }; - } -}); - -tape( 'the function throws an error if provided a pulse duration which is less than 3', function test( t ) { - var values; - var i; - - values = [ - 1, - 2 - ]; - - for ( i = 0; i < values.length; i++ ) { - t.throws( badValue( values[i] ), RangeError, 'throws an error when provided '+values[i] ); - } - t.end(); - - function badValue( value ) { - return function badValue() { - iterBartlettHannPulse({ - 'duration': value, - 'period': 4 - }); - }; - } -}); - -tape( 'the function returns an iterator protocol-compliant object which generates a "Bartlett-Hann" pulse waveform', function test( t ) { - var expected; - var actual; - var delta; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = T; - A = 1.0; - phi = 0; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } - - it = iterBartlettHannPulse(); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the pulse period', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var A; - var T; - var i; - var j; - - T = 10; - tau = T; - A = 1.0; - phi = 0; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } - - opts = { - 'period': T - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the pulse duration', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var A; - var T; - var i; - var j; - - T = 100; - tau = 50; - A = 1.0; - phi = 0; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the waveform amplitude', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = 50; - A = 10.0; - phi = 0; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau, - 'amplitude': A - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the phase offset (left shift)', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = 50; - A = 1.0; - phi = -30; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau, - 'offset': phi - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the phase offset (left shift; mod)', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = 50; - A = 1.0; - phi = -130; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < 0 ) { - j += T; - } - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau, - 'offset': phi - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the phase offset (right shift)', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = 50; - A = 1.0; - phi = 30; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < 0 ) { - j += T; - } - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau, - 'offset': phi - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports specifying the phase offset (right shift; mod)', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var phi; - var tau; - var it; - var T; - var A; - var i; - var j; - - T = 100; - tau = 50; - A = 1.0; - phi = 230; - - expected = []; - for ( i = 0; i < 200; i++ ) { - j = (i-phi) % T; - if ( j < 0 ) { - j += T; - } - if ( j < tau ) { - expected.push({ - 'value': bartlettHann( j, A, tau ), - 'done': false - }); - } else { - expected.push({ - 'value': 0.0, - 'done': false - }); - } - } - - opts = { - 'period': T, - 'duration': tau, - 'offset': phi - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - t.end(); -}); - -tape( 'the function supports limiting the number of iterations', function test( t ) { - var expected; - var actual; - var delta; - var opts; - var tol; - var tau; - var it; - var A; - var T; - var i; - - T = 10; - tau = T; - A = 1.0; - - expected = []; - for ( i = 0; i < 4; i++ ) { - expected.push({ - 'value': bartlettHann( i, A, tau ), - 'done': false - }); - } - - opts = { - 'period': T, - 'iter': 4 - }; - it = iterBartlettHannPulse( opts ); - t.equal( it.next.length, 0, 'has zero arity' ); - - for ( i = 0; i < expected.length; i++ ) { - actual = it.next(); - t.equal( actual.done, expected[ i ].done, 'returns expected value' ); - if ( actual.value === expected[ i ].value ) { - t.equal( actual.value, expected[ i ].value, 'returns expected value' ); - } else { - delta = abs( actual.value - expected[ i ].value ); - tol = 1.0 * EPS * abs( expected[ i ].value ); - t.equal( delta <= tol, true, 'within tolerance. i: '+i+'. actual: '+actual.value+'. expected: '+expected[ i ].value+'. delta: '+delta+'. tol: '+tol+'.' ); - } - } - actual = it.next(); - t.equal( actual.value, void 0, 'returns expected value' ); - t.equal( actual.done, true, 'returns expected value' ); - - t.end(); -}); - -tape( 'the returned iterator has a `return` method for closing an iterator (no argument)', function test( t ) { - var it; - var r; - - it = iterBartlettHannPulse(); - - 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 = iterBartlettHannPulse(); - - 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`, the returned iterator is iterable', function test( t ) { - var iterBartlettHannPulse; - var it1; - var it2; - var i; - - iterBartlettHannPulse = proxyquire( './../dist/main.js', { - '@stdlib/symbol-iterator': '__ITERATOR_SYMBOL__' - }); - - it1 = iterBartlettHannPulse(); - 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 < 10; i++ ) { - t.equal( it2.next().value, it1.next().value, 'returns expected value' ); - } - t.end(); -}); - -tape( 'if an environment does not support `Symbol.iterator`, the returned iterator is not "iterable"', function test( t ) { - var iterBartlettHannPulse; - var it; - - iterBartlettHannPulse = proxyquire( './../dist/main.js', { - '@stdlib/symbol-iterator': false - }); - - it = iterBartlettHannPulse(); - t.equal( it[ iteratorSymbol ], void 0, 'does not have property' ); - + t.strictEqual( main !== void 0, true, 'main export is defined' ); t.end(); });