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 eae6813 commit 49335dd
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 228 deletions.
1 change: 0 additions & 1 deletion .github/.keepalive

This file was deleted.

14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,19 @@
"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-nonnegative-integer": "^0.1.0",
"@stdlib/assert-is-plain-object": "^0.1.0",
"@stdlib/constants-float64-max-safe-integer": "^0.1.0",
"@stdlib/string-format": "^0.1.0",
"@stdlib/assert-is-plain-object": "^0.1.1",
"@stdlib/constants-float64-max-safe-integer": "^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/assert-is-iterator-like": "^0.1.0",
"@stdlib/assert-is-iterator-like": "^0.1.1",
"@stdlib/bench": "^0.1.0",
"@stdlib/math-base-assert-is-nan": "^0.1.0",
"@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",
Expand Down
224 changes: 4 additions & 220 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) 2020 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,229 +21,13 @@
// MODULES //

var tape = require( 'tape' );
var proxyquire = require( 'proxyquire' );
var iteratorSymbol = require( '@stdlib/symbol-iterator' );
var isNonNegativeInteger = require( '@stdlib/assert-is-nonnegative-integer' ).isPrimitive;
var iterNonNegativeIntegersSeq = require( './../../dist' ); // eslint-disable-line id-length
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 iterNonNegativeIntegersSeq, '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() {
iterNonNegativeIntegersSeq( 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() {
iterNonNegativeIntegersSeq({
'iter': value
});
};
}
});

tape( 'the function returns an iterator protocol-compliant object which generates a nonnegative integer sequence', function test( t ) {
var expected;
var actual;
var it;
var i;

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

for ( i = 0; i < 1000; i++ ) {
actual = it.next();
expected = i;
t.equal( actual.value, expected, 'returns expected value' );
t.equal( isNonNegativeInteger( actual.value ), true, 'returns a nonnegative integer' );
t.equal( actual.done, false, 'returns expected value' );
}
t.end();
});

tape( 'the function supports limiting the number of iterations', function test( t ) {
var expected;
var actual;
var opts;
var it;
var i;

expected = [
{
'value': 0,
'done': false
},
{
'value': 1,
'done': false
},
{
'value': 2,
'done': false
},
{
'value': 3,
'done': false
},
{
'done': true
}
];

opts = {
'iter': 4
};
it = iterNonNegativeIntegersSeq( opts );
t.equal( it.next.length, 0, 'has zero arity' );

actual = [];
for ( i = 0; i < opts.iter; i++ ) {
actual.push( it.next() );
}
actual.push( it.next() );

t.deepEqual( actual, expected, 'returns expected values' );
t.end();
});

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

it = iterNonNegativeIntegersSeq();

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 = iterNonNegativeIntegersSeq();

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 iterNonNegativeIntegersSeq; // eslint-disable-line id-length
var it1;
var it2;
var i;

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

it1 = iterNonNegativeIntegersSeq();
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 iterNonNegativeIntegersSeq; // eslint-disable-line id-length
var it;

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

it = iterNonNegativeIntegersSeq();
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 49335dd

Please sign in to comment.