throw a RangeError on infinity and non-safe integers for Iterator#includes skippedElements

https://github.com/tc39/proposal-iterator-includes/pull/15
This commit is contained in:
Denis Pushkarev
2026-06-28 15:43:37 +07:00
parent ea3487a8a6
commit 20e17808b3
3 changed files with 10 additions and 10 deletions
@@ -11,7 +11,7 @@ var $RangeError = RangeError;
var $TypeError = TypeError;
var $Infinity = Infinity;
var INVALID_SKIPPED_ELEMENTS = 'skippedElements should be a positive integer or Infinity';
var INVALID_SKIPPED_ELEMENTS = 'skippedElements should be a positive safe integer';
// `Iterator.prototype.includes` method
// https://github.com/tc39/proposal-iterator-includes
@@ -29,7 +29,9 @@ $({ target: 'Iterator', proto: true, real: true, forced: IS_PURE }, {
} else {
throw new $TypeError(INVALID_SKIPPED_ELEMENTS);
}
if (toSkip < 0) throw new $RangeError(INVALID_SKIPPED_ELEMENTS);
if (toSkip < 0 || toSkip > 0x1FFFFFFFFFFFFF) {
throw new $RangeError(INVALID_SKIPPED_ELEMENTS);
}
} catch (error) {
iteratorClose(this, 'throw', error);
}
@@ -27,11 +27,9 @@ QUnit.test('Iterator#includes', assert => {
assert.true(includes.call(createIterator([1, 2, 3]), 1, 0), 'skippedElements 0');
assert.true(includes.call(createIterator([1, 2, 3]), 1, -0), 'skippedElements -0');
assert.true(includes.call(createIterator([1, 2, 3]), 1, undefined), 'skippedElements undefined');
assert.false(includes.call(createIterator([1, 2, 3]), 1, Infinity), 'skippedElements Infinity');
assert.true(includes.call(createIterator([1, 2, 3, 2]), 2, 2), 'skippedElements finds later occurrence');
assert.false(includes.call(createIterator([1, 2, 3]), 2, 3), 'skippedElements skips all');
// skippedElements parameter - invalid values (must be integral Number, +Infinity, or -Infinity)
assert.throws(() => includes.call(createIterator([1]), 1, 1.5), TypeError, 'non-integer number');
assert.throws(() => includes.call(createIterator([1]), 1, NaN), TypeError, 'NaN');
assert.throws(() => includes.call(createIterator([1]), 1, '1'), TypeError, 'string');
@@ -39,9 +37,10 @@ QUnit.test('Iterator#includes', assert => {
assert.throws(() => includes.call(createIterator([1]), 1, null), TypeError, 'null');
assert.throws(() => includes.call(createIterator([1]), 1, {}), TypeError, 'object');
// skippedElements - negative values
assert.throws(() => includes.call(createIterator([1]), 1, -1), RangeError, 'negative integer');
assert.throws(() => includes.call(createIterator([1, 2, 3]), 1, Infinity), RangeError, 'skippedElements Infinity');
assert.throws(() => includes.call(createIterator([1]), 1, -Infinity), RangeError, 'negative Infinity');
assert.throws(() => includes.call(createIterator([1]), 1, -1), RangeError, 'negative integer');
assert.throws(() => includes.call(createIterator([1]), 1, 0x20000000000000), RangeError, 'unsafe integer');
// iterator closing on match
const it1 = createIterator([1, 2, 3], {
+3 -4
View File
@@ -28,11 +28,9 @@ QUnit.test('Iterator#includes', assert => {
assert.true(includes.call(createIterator([1, 2, 3]), 1, 0), 'skippedElements 0');
assert.true(includes.call(createIterator([1, 2, 3]), 1, -0), 'skippedElements -0');
assert.true(includes.call(createIterator([1, 2, 3]), 1, undefined), 'skippedElements undefined');
assert.false(includes.call(createIterator([1, 2, 3]), 1, Infinity), 'skippedElements Infinity');
assert.true(includes.call(createIterator([1, 2, 3, 2]), 2, 2), 'skippedElements finds later occurrence');
assert.false(includes.call(createIterator([1, 2, 3]), 2, 3), 'skippedElements skips all');
// skippedElements parameter - invalid values (must be integral Number, +Infinity, or -Infinity)
assert.throws(() => includes.call(createIterator([1]), 1, 1.5), TypeError, 'non-integer number');
assert.throws(() => includes.call(createIterator([1]), 1, NaN), TypeError, 'NaN');
assert.throws(() => includes.call(createIterator([1]), 1, '1'), TypeError, 'string');
@@ -40,9 +38,10 @@ QUnit.test('Iterator#includes', assert => {
assert.throws(() => includes.call(createIterator([1]), 1, null), TypeError, 'null');
assert.throws(() => includes.call(createIterator([1]), 1, {}), TypeError, 'object');
// skippedElements - negative values
assert.throws(() => includes.call(createIterator([1]), 1, -1), RangeError, 'negative integer');
assert.throws(() => includes.call(createIterator([1, 2, 3]), 1, Infinity), RangeError, 'skippedElements Infinity');
assert.throws(() => includes.call(createIterator([1]), 1, -Infinity), RangeError, 'negative Infinity');
assert.throws(() => includes.call(createIterator([1]), 1, -1), RangeError, 'negative integer');
assert.throws(() => includes.call(createIterator([1]), 1, 0x20000000000000), RangeError, 'unsafe integer');
// iterator closing on match
const it1 = createIterator([1, 2, 3], {