mirror of
https://github.com/hanzoai/core-js.git
synced 2026-09-24 16:58:15 +00:00
update Iterator.range following the actual spec version to throw a RangeError on NaN start / end / step
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# Changelog
|
||||
### Unreleased
|
||||
- Improved performance of `atob` and `btoa`, [#1503](https://github.com/zloirock/core-js/issues/1503), [#1464](https://github.com/zloirock/core-js/issues/1464)
|
||||
- [`Iterator.range`](https://github.com/tc39/proposal-iterator.range) updated following the actual spec version to throw a `RangeError` on `NaN` `start` / `end` / `step`
|
||||
- Forced replacement of `Iterator.{ concat, zip, zipKeyed }` in the pure version for ensuring proper wrapped `Iterator` instances as the result
|
||||
- Fixed some cases of iterators closing in `Iterator.{ zip, zipKeyed }` polyfill in the `strict` mode
|
||||
- Fixed `DataView.prototype.setFloat16` polyfill in (0, 1) range
|
||||
|
||||
@@ -17,6 +17,10 @@ var $RangeError = RangeError;
|
||||
var $TypeError = TypeError;
|
||||
|
||||
var $RangeIterator = createIteratorConstructor(function NumericRangeIterator(start, end, option, type, zero, one) {
|
||||
// eslint-disable-next-line no-self-compare -- NaN check
|
||||
if (start !== start || end !== end) {
|
||||
throw new $RangeError(INCORRECT_RANGE);
|
||||
}
|
||||
// TODO: Drop the first `typeof` check after removing legacy methods in `core-js@4`
|
||||
if (typeof start != type || (end !== Infinity && end !== -Infinity && typeof end != type)) {
|
||||
throw new $TypeError(INCORRECT_RANGE);
|
||||
@@ -43,11 +47,11 @@ var $RangeIterator = createIteratorConstructor(function NumericRangeIterator(sta
|
||||
if (typeof step != type) {
|
||||
throw new $TypeError(INCORRECT_RANGE);
|
||||
}
|
||||
if (step === Infinity || step === -Infinity || (step === zero && start !== end)) {
|
||||
// eslint-disable-next-line no-self-compare -- NaN check
|
||||
if (step !== step || step === Infinity || step === -Infinity || (step === zero && start !== end)) {
|
||||
throw new $RangeError(INCORRECT_RANGE);
|
||||
}
|
||||
// eslint-disable-next-line no-self-compare -- NaN check
|
||||
var hitsEnd = start !== start || end !== end || step !== step || (end > start) !== (step > zero);
|
||||
var hitsEnd = end > start !== step > zero;
|
||||
setInternalState(this, {
|
||||
type: NUMERIC_RANGE_ITERATOR,
|
||||
start: start,
|
||||
|
||||
@@ -35,11 +35,11 @@ QUnit.test('Iterator.range', assert => {
|
||||
assert.deepEqual(from(range(0, 0)), []);
|
||||
assert.deepEqual(from(range(0, -5, 1)), []);
|
||||
|
||||
assert.deepEqual(from(range(NaN, 0)), []);
|
||||
assert.deepEqual(from(range(0, NaN)), []);
|
||||
assert.deepEqual(from(range(NaN, NaN)), []);
|
||||
assert.deepEqual(from(range(0, 0, { step: NaN })), []);
|
||||
assert.deepEqual(from(range(0, 5, NaN)), []);
|
||||
assert.throws(() => range(NaN, 0), RangeError, 'NaN as start');
|
||||
assert.throws(() => range(0, NaN), RangeError, 'NaN as end');
|
||||
assert.throws(() => range(NaN, NaN), RangeError, 'NaN as start and end');
|
||||
assert.throws(() => range(0, 0, { step: NaN }), RangeError, 'NaN as step option');
|
||||
assert.throws(() => range(0, 5, NaN), RangeError, 'NaN as step argument');
|
||||
|
||||
iterator = range(1, 3);
|
||||
assert.deepEqual(iterator.start, 1);
|
||||
|
||||
@@ -35,11 +35,11 @@ QUnit.test('Number.range', assert => {
|
||||
assert.deepEqual(from(range(0, 0)), []);
|
||||
assert.deepEqual(from(range(0, -5, 1)), []);
|
||||
|
||||
assert.deepEqual(from(range(NaN, 0)), []);
|
||||
assert.deepEqual(from(range(0, NaN)), []);
|
||||
assert.deepEqual(from(range(NaN, NaN)), []);
|
||||
assert.deepEqual(from(range(0, 0, { step: NaN })), []);
|
||||
assert.deepEqual(from(range(0, 5, NaN)), []);
|
||||
assert.throws(() => range(NaN, 0), RangeError, 'NaN as start');
|
||||
assert.throws(() => range(0, NaN), RangeError, 'NaN as end');
|
||||
assert.throws(() => range(NaN, NaN), RangeError, 'NaN as start and end');
|
||||
assert.throws(() => range(0, 0, { step: NaN }), RangeError, 'NaN as step option');
|
||||
assert.throws(() => range(0, 5, NaN), RangeError, 'NaN as step argument');
|
||||
|
||||
iterator = range(1, 3);
|
||||
assert.deepEqual(iterator.start, 1);
|
||||
|
||||
@@ -34,11 +34,11 @@ QUnit.test('Iterator.range', assert => {
|
||||
assert.deepEqual(from(range(0, 0)), []);
|
||||
assert.deepEqual(from(range(0, -5, 1)), []);
|
||||
|
||||
assert.deepEqual(from(range(NaN, 0)), []);
|
||||
assert.deepEqual(from(range(0, NaN)), []);
|
||||
assert.deepEqual(from(range(NaN, NaN)), []);
|
||||
assert.deepEqual(from(range(0, 0, { step: NaN })), []);
|
||||
assert.deepEqual(from(range(0, 5, NaN)), []);
|
||||
assert.throws(() => range(NaN, 0), RangeError, 'NaN as start');
|
||||
assert.throws(() => range(0, NaN), RangeError, 'NaN as end');
|
||||
assert.throws(() => range(NaN, NaN), RangeError, 'NaN as start and end');
|
||||
assert.throws(() => range(0, 0, { step: NaN }), RangeError, 'NaN as step option');
|
||||
assert.throws(() => range(0, 5, NaN), RangeError, 'NaN as step argument');
|
||||
|
||||
iterator = range(1, 3);
|
||||
assert.deepEqual(iterator.start, 1);
|
||||
|
||||
@@ -33,11 +33,11 @@ QUnit.test('range', assert => {
|
||||
assert.deepEqual(from(range(0, 0)), []);
|
||||
assert.deepEqual(from(range(0, -5, 1)), []);
|
||||
|
||||
assert.deepEqual(from(range(NaN, 0)), []);
|
||||
assert.deepEqual(from(range(0, NaN)), []);
|
||||
assert.deepEqual(from(range(NaN, NaN)), []);
|
||||
assert.deepEqual(from(range(0, 0, { step: NaN })), []);
|
||||
assert.deepEqual(from(range(0, 5, NaN)), []);
|
||||
assert.throws(() => range(NaN, 0), RangeError, 'NaN as start');
|
||||
assert.throws(() => range(0, NaN), RangeError, 'NaN as end');
|
||||
assert.throws(() => range(NaN, NaN), RangeError, 'NaN as start and end');
|
||||
assert.throws(() => range(0, 0, { step: NaN }), RangeError, 'NaN as step option');
|
||||
assert.throws(() => range(0, 5, NaN), RangeError, 'NaN as step argument');
|
||||
|
||||
iterator = range(1, 3);
|
||||
assert.deepEqual(iterator.start, 1);
|
||||
|
||||
Reference in New Issue
Block a user