mirror of
https://github.com/tc39/test262.git
synced 2025-07-23 14:04:51 +02:00
Whitespace cleanups. CRLF => LF
This commit is contained in:
parent
bb6ce7e435
commit
d49777de27
@ -1,46 +1,20 @@
|
||||
// Copyright 2019 Ron Buckton. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
description: |
|
||||
description: >
|
||||
Compare two values structurally
|
||||
defines: [assert.deepEqual]
|
||||
---*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
var deepEqual = (function () {
|
||||
/**
|
||||
* @typedef {0} UNKNOWN
|
||||
* @typedef {1} EQUAL
|
||||
* @typedef {-1} NOT_EQUAL
|
||||
* @typedef {Map<unknown, Map<unknown, EQUAL | NOT_EQUAL>>} ComparisonCache
|
||||
*/
|
||||
|
||||
/** @type {EQUAL} */
|
||||
var EQUAL = 1;
|
||||
|
||||
/** @type {NOT_EQUAL} */
|
||||
var NOT_EQUAL = -1;
|
||||
|
||||
/** @type {UNKNOWN} */
|
||||
var UNKNOWN = 0;
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {T} a
|
||||
* @param {T} b
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function deepEqual(a, b) {
|
||||
return compareEquality(a, b) === EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {unknown} a
|
||||
* @param {unknown} b
|
||||
* @param {ComparisonCache} [cache]
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareEquality(a, b, cache) {
|
||||
return compareIf(a, b, isOptional, compareOptionality)
|
||||
|| compareIf(a, b, isPrimitiveEquatable, comparePrimitiveEquality)
|
||||
@ -48,63 +22,36 @@ var deepEqual = (function () {
|
||||
|| NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {unknown} a
|
||||
* @param {unknown} b
|
||||
* @param {(value: unknown) => value is T} test
|
||||
* @param {(a: T, b: T, cache?: ComparisonCache) => EQUAL | NOT_EQUAL} compare
|
||||
* @param {ComparisonCache} [cache]
|
||||
* @returns {EQUAL | NOT_EQUAL | UNKNOWN}
|
||||
*/
|
||||
function compareIf(a, b, test, compare, cache) {
|
||||
return !test(a)
|
||||
? !test(b) ? UNKNOWN : NOT_EQUAL
|
||||
: !test(b) ? NOT_EQUAL : cacheComparison(a, b, compare, cache);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {EQUAL | UNKNOWN}
|
||||
*/
|
||||
function tryCompareStrictEquality(a, b) {
|
||||
return a === b ? EQUAL : UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {NOT_EQUAL | UNKNOWN}
|
||||
*/
|
||||
function tryCompareTypeOfEquality(a, b) {
|
||||
return typeof a !== typeof b ? NOT_EQUAL : UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {NOT_EQUAL | UNKNOWN}
|
||||
*/
|
||||
function tryCompareToStringTagEquality(a, b) {
|
||||
var aTag = Symbol.toStringTag in a ? a[Symbol.toStringTag] : undefined;
|
||||
var bTag = Symbol.toStringTag in b ? b[Symbol.toStringTag] : undefined;
|
||||
return aTag !== bTag ? NOT_EQUAL : UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is null | undefined}
|
||||
*/
|
||||
function isOptional(value) {
|
||||
return value === undefined
|
||||
|| value === null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareOptionality(a, b) {
|
||||
return tryCompareStrictEquality(a, b)
|
||||
|| NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is number | bigint | string | symbol | boolean | undefined}
|
||||
*/
|
||||
function isPrimitiveEquatable(value) {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
@ -118,9 +65,6 @@ var deepEqual = (function () {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function comparePrimitiveEquality(a, b) {
|
||||
if (isBoxed(a)) a = a.valueOf();
|
||||
if (isBoxed(b)) b = b.valueOf();
|
||||
@ -130,33 +74,18 @@ var deepEqual = (function () {
|
||||
|| NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is number}
|
||||
*/
|
||||
function isNaNEquatable(value) {
|
||||
return typeof value === 'number';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} a
|
||||
* @param {number} b
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareNaNEquality(a, b) {
|
||||
return isNaN(a) && isNaN(b) ? EQUAL : NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is object}
|
||||
*/
|
||||
function isObjectEquatable(value) {
|
||||
return typeof value === 'object';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ComparisonCache} cache
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareObjectEquality(a, b, cache) {
|
||||
if (!cache) cache = new Map();
|
||||
return getCache(cache, a, b)
|
||||
@ -179,43 +108,24 @@ var deepEqual = (function () {
|
||||
|| typeof BigInt === 'function' && value instanceof BigInt;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is { valueOf(): any }}
|
||||
*/
|
||||
function isValueOfEquatable(value) {
|
||||
return value instanceof Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {{ valueOf(): any }} a
|
||||
* @param {{ valueOf(): any }} b
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareValueOfEquality(a, b) {
|
||||
return compareIf(a.valueOf(), b.valueOf(), isPrimitiveEquatable, comparePrimitiveEquality)
|
||||
|| NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is { toString(): string }}
|
||||
*/
|
||||
function isToStringEquatable(value) {
|
||||
return value instanceof RegExp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {{ toString(): string }} a
|
||||
* @param {{ toString(): string }} b
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareToStringEquality(a, b) {
|
||||
return compareIf(a.toString(), b.toString(), isPrimitiveEquatable, comparePrimitiveEquality)
|
||||
|| NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is ArrayLike<unknown>}
|
||||
*/
|
||||
function isArrayLikeEquatable(value) {
|
||||
return (Array.isArray ? Array.isArray(value) : value instanceof Array)
|
||||
|| (typeof Uint8Array === 'function' && value instanceof Uint8Array)
|
||||
@ -231,13 +141,6 @@ var deepEqual = (function () {
|
||||
|| (typeof BigInt64Array === 'function' && value instanceof BigInt64Array);
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {ArrayLike<T>} a
|
||||
* @param {ArrayLike<T>} b
|
||||
* @param {ComparisonCache} cache
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareArrayLikeEquality(a, b, cache) {
|
||||
if (a.length !== b.length) return NOT_EQUAL;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
@ -248,11 +151,6 @@ var deepEqual = (function () {
|
||||
return EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {T} value
|
||||
* @returns {value is Exclude<T, Promise | WeakMap | WeakSet | Map | Set>}
|
||||
*/
|
||||
function isStructurallyEquatable(value) {
|
||||
return !(typeof Promise === 'function' && value instanceof Promise // only comparable by reference
|
||||
|| typeof WeakMap === 'function' && value instanceof WeakMap // only comparable by reference
|
||||
@ -261,10 +159,6 @@ var deepEqual = (function () {
|
||||
|| typeof Set === 'function' && value instanceof Set); // comparable via @@iterator
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ComparisonCache} cache
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareStructuralEquality(a, b, cache) {
|
||||
var aKeys = [];
|
||||
for (var key in a) aKeys.push(key);
|
||||
@ -294,21 +188,11 @@ var deepEqual = (function () {
|
||||
|| EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {value is Iterable<unknown>}
|
||||
*/
|
||||
function isIterableEquatable(value) {
|
||||
return typeof Symbol === 'function'
|
||||
&& typeof value[Symbol.iterator] === 'function';
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {Iterator<T>} a
|
||||
* @param {Iterator<T>} b
|
||||
* @param {ComparisonCache} cache
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareIteratorEquality(a, b, cache) {
|
||||
if (typeof Map === 'function' && a instanceof Map && b instanceof Map ||
|
||||
typeof Set === 'function' && a instanceof Set && b instanceof Set) {
|
||||
@ -336,23 +220,10 @@ var deepEqual = (function () {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {Iterable<T>} a
|
||||
* @param {Iterable<T>} b
|
||||
* @param {ComparisonCache} cache
|
||||
* @returns {EQUAL | NOT_EQUAL}
|
||||
*/
|
||||
function compareIterableEquality(a, b, cache) {
|
||||
return compareIteratorEquality(a[Symbol.iterator](), b[Symbol.iterator](), cache);
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @template {EQUAL | NOT_EQUAL | UNKNOWN} R
|
||||
* @param {(a: T, b: T, circular?: ComparisonCache) => R} compare
|
||||
* @param {ComparisonCache} [cache]
|
||||
*/
|
||||
function cacheComparison(a, b, compare, cache) {
|
||||
var result = compare(a, b, cache);
|
||||
if (cache && (result === EQUAL || result === NOT_EQUAL)) {
|
||||
@ -365,10 +236,6 @@ var deepEqual = (function () {
|
||||
return NOT_EQUAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {EQUAL | NOT_EQUAL} result
|
||||
* @param {ComparisonCache} cache
|
||||
*/
|
||||
function setCache(cache, left, right, result) {
|
||||
var otherCache;
|
||||
|
||||
@ -381,9 +248,6 @@ var deepEqual = (function () {
|
||||
otherCache.set(left, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ComparisonCache} cache
|
||||
*/
|
||||
function getCache(cache, left, right) {
|
||||
var otherCache;
|
||||
/** @type {EQUAL | NOT_EQUAL | UNKNOWN | undefined} */
|
||||
@ -403,12 +267,6 @@ var deepEqual = (function () {
|
||||
return deepEqual;
|
||||
})();
|
||||
|
||||
/**
|
||||
* @template T
|
||||
* @param {T} actual
|
||||
* @param {T} expected
|
||||
* @param {string} [message]
|
||||
*/
|
||||
assert.deepEqual = function (actual, expected, message) {
|
||||
assert(deepEqual(actual, expected),
|
||||
'Expected ' + assert._formatValue(actual) + ' to be structurally equal to ' + assert._formatValue(expected) + '. ' + (message || ''));
|
||||
|
14
harness/types.d.ts
vendored
14
harness/types.d.ts
vendored
@ -1,14 +0,0 @@
|
||||
declare function $ERROR(text: string): void;
|
||||
|
||||
// Proposal: regexp-match-indices
|
||||
interface RegExpExecArray {
|
||||
indices: RegExpIndicesArray;
|
||||
}
|
||||
|
||||
interface RegExpMatchArray {
|
||||
indices: RegExpIndicesArray;
|
||||
}
|
||||
|
||||
interface RegExpIndicesArray extends Array<[number, number]> {
|
||||
groups?: { [group: string]: [number, number] };
|
||||
}
|
@ -10,7 +10,6 @@ info: |
|
||||
5. Return CreateArrayFromList(« _match_.[[StartIndex]], _match_.[[EndIndex]] »).
|
||||
---*/
|
||||
|
||||
|
||||
let input = "abcd";
|
||||
let match = /b(c)/.exec(input);
|
||||
let indices = match.indices;
|
||||
|
@ -22,7 +22,6 @@ info: |
|
||||
...
|
||||
---*/
|
||||
|
||||
|
||||
let input = "abcd";
|
||||
let match = /b(c)/.exec(input);
|
||||
let indices = match.indices;
|
||||
|
@ -27,7 +27,6 @@ info: |
|
||||
34. Let _indicesArray_ be MakeIndicesArray( _S_, _indices_, _groupNames_).
|
||||
---*/
|
||||
|
||||
|
||||
assert.deepEqual([[1, 2], [1, 2]], "bab".match(/(a)/).indices);
|
||||
assert.deepEqual([[0, 3], [1, 2]], "bab".match(/.(a)./).indices);
|
||||
assert.deepEqual([[0, 3], [1, 2], [2, 3]], "bab".match(/.(a)(.)/).indices);
|
||||
|
@ -12,7 +12,6 @@ info: |
|
||||
d. Perform ! CreateDataProperty(_A_, ! ToString(_n_), _matchIndicesArray_).
|
||||
---*/
|
||||
|
||||
|
||||
let input = "abcd";
|
||||
let match = /b(c)/.exec(input);
|
||||
let indices = match.indices;
|
||||
|
@ -36,7 +36,6 @@ info: |
|
||||
5. Return _eUTF_.
|
||||
---*/
|
||||
|
||||
|
||||
assert.deepEqual([[1, 2], [1, 2]], "bab".match(/(a)/u).indices);
|
||||
assert.deepEqual([[0, 3], [1, 2]], "bab".match(/.(a)./u).indices);
|
||||
assert.deepEqual([[0, 3], [1, 2], [2, 3]], "bab".match(/.(a)(.)/u).indices);
|
||||
|
@ -8,7 +8,6 @@ esid: sec-makeindicesarray
|
||||
features: [regexp-match-indices]
|
||||
---*/
|
||||
|
||||
|
||||
assert.compareArray([1, 2], /(?<π>a)/u.exec("bab").indices.groups.π);
|
||||
assert.compareArray([1, 2], /(?<\u{03C0}>a)/u.exec("bab").indices.groups.π);
|
||||
assert.compareArray([1, 2], /(?<π>a)/u.exec("bab").indices.groups.\u03C0);
|
||||
|
@ -21,7 +21,6 @@ info: |
|
||||
...
|
||||
---*/
|
||||
|
||||
|
||||
let input = "abd";
|
||||
let match = /b(c)?/.exec(input);
|
||||
let indices = match.indices;
|
||||
|
@ -10,7 +10,6 @@ info: |
|
||||
6. Set _A_ to ! ArrayCreate(_n_).
|
||||
---*/
|
||||
|
||||
|
||||
let match = /a/.exec("a");
|
||||
let indices = match.indices;
|
||||
|
||||
|
@ -12,7 +12,6 @@ info: |
|
||||
35. Perform ! DefinePropertyOrThrow(_A_, `"indices"`, PropertyDescriptor { [[Value]]: _indicesArray_, [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }).
|
||||
---*/
|
||||
|
||||
|
||||
// `indices` is created with Define, not Set.
|
||||
let counter = 0;
|
||||
Object.defineProperty(Array.prototype, "indices", {
|
||||
|
@ -7,7 +7,6 @@ description: >
|
||||
includes: [deepEqual.js]
|
||||
---*/
|
||||
|
||||
|
||||
assert.deepEqual([], []);
|
||||
assert.deepEqual([1, "a", true], [1, "a", true]);
|
||||
|
||||
|
@ -7,7 +7,6 @@ description: >
|
||||
includes: [deepEqual.js]
|
||||
---*/
|
||||
|
||||
|
||||
var a = { x: 1 };
|
||||
var b = { x: 1 };
|
||||
a.a = a;
|
||||
|
@ -7,7 +7,6 @@ description: >
|
||||
includes: [deepEqual.js]
|
||||
---*/
|
||||
|
||||
|
||||
assert.deepEqual({ a: { x: 1 }, b: [true] }, { a: { x: 1 }, b: [true] });
|
||||
|
||||
assert.throws(Test262Error, function () { assert.deepEqual({}, { a: { x: 1 }, b: [true] }); });
|
||||
|
@ -7,7 +7,6 @@ description: >
|
||||
includes: [deepEqual.js]
|
||||
---*/
|
||||
|
||||
|
||||
assert.deepEqual(new Set(), new Set());
|
||||
assert.deepEqual(new Set([1, "a", true]), new Set([1, "a", true]));
|
||||
assert.deepEqual(new Map(), new Map());
|
||||
|
Loading…
x
Reference in New Issue
Block a user