mirror of
https://github.com/hanzoai/core-js.git
synced 2026-09-24 16:58:15 +00:00
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:
@@ -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], {
|
||||
|
||||
@@ -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], {
|
||||
|
||||
Reference in New Issue
Block a user