mirror of
https://github.com/nodejs/node.git
synced 2025-05-01 17:03:34 +00:00

Previously, all ArrayBuffers were considered equal in assert.deepEqual() and assert.deepStrictEqual(). Now, ArrayBuffers and SharedArrayBuffers must have the same byte lengths and contents to be considered equal. In loose mode, an ArrayBuffer is considered equal to a SharedArrayBuffer if they have the same contents, whereas in strict mode, the buffers must be both ArrayBuffers or both SharedArrayBuffers. PR-URL: https://github.com/nodejs/node/pull/22266 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com>
91 lines
3.2 KiB
JavaScript
91 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
|
|
function makeBlock(f) {
|
|
const args = Array.prototype.slice.call(arguments, 1);
|
|
return function() {
|
|
return f.apply(this, args);
|
|
};
|
|
}
|
|
|
|
const equalArrayPairs = [
|
|
[new Uint8Array(1e5), new Uint8Array(1e5)],
|
|
[new Uint16Array(1e5), new Uint16Array(1e5)],
|
|
[new Uint32Array(1e5), new Uint32Array(1e5)],
|
|
[new Uint8ClampedArray(1e5), new Uint8ClampedArray(1e5)],
|
|
[new Int8Array(1e5), new Int8Array(1e5)],
|
|
[new Int16Array(1e5), new Int16Array(1e5)],
|
|
[new Int32Array(1e5), new Int32Array(1e5)],
|
|
[new Float32Array(1e5), new Float32Array(1e5)],
|
|
[new Float64Array(1e5), new Float64Array(1e5)],
|
|
[new Float32Array([+0.0]), new Float32Array([+0.0])],
|
|
[new Uint8Array([1, 2, 3, 4]).subarray(1), new Uint8Array([2, 3, 4])],
|
|
[new Uint16Array([1, 2, 3, 4]).subarray(1), new Uint16Array([2, 3, 4])],
|
|
[new Uint32Array([1, 2, 3, 4]).subarray(1, 3), new Uint32Array([2, 3])],
|
|
[new ArrayBuffer(3), new ArrayBuffer(3)],
|
|
[new SharedArrayBuffer(3), new SharedArrayBuffer(3)]
|
|
];
|
|
|
|
const looseEqualArrayPairs = [
|
|
[new Float64Array([+0.0]), new Float32Array([-0.0])],
|
|
[new Int16Array(256), new Uint16Array(256)],
|
|
[new Int16Array([256]), new Uint16Array([256])],
|
|
[new Float32Array([+0.0]), new Float32Array([-0.0])],
|
|
[new Float64Array([+0.0]), new Float64Array([-0.0])],
|
|
[new ArrayBuffer(3), new SharedArrayBuffer(3)]
|
|
];
|
|
|
|
const notEqualArrayPairs = [
|
|
[new Uint8Array(2), new Uint8Array(3)],
|
|
[new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
|
|
[new Uint8ClampedArray([300, 2, 3]), new Uint8Array([300, 2, 3])],
|
|
[new Uint16Array([2]), new Uint16Array([3])],
|
|
[new Uint16Array([0]), new Uint16Array([256])],
|
|
[new Int16Array([0]), new Uint16Array([256])],
|
|
[new Int16Array([-256]), new Uint16Array([0xff00])], // same bits
|
|
[new Int32Array([-256]), new Uint32Array([0xffffff00])], // ditto
|
|
[new Float32Array([0.1]), new Float32Array([0.0])],
|
|
[new Float64Array([0.1]), new Float64Array([0.0])],
|
|
[new Uint8Array([1, 2, 3]).buffer, new Uint8Array([4, 5, 6]).buffer],
|
|
[
|
|
new Uint8Array(new SharedArrayBuffer(3)).fill(1).buffer,
|
|
new Uint8Array(new SharedArrayBuffer(3)).fill(2).buffer
|
|
],
|
|
[new ArrayBuffer(2), new ArrayBuffer(3)],
|
|
[new SharedArrayBuffer(2), new SharedArrayBuffer(3)],
|
|
[new ArrayBuffer(2), new SharedArrayBuffer(3)],
|
|
[
|
|
new Uint8Array(new ArrayBuffer(3)).fill(1).buffer,
|
|
new Uint8Array(new SharedArrayBuffer(3)).fill(2).buffer
|
|
]
|
|
];
|
|
|
|
equalArrayPairs.forEach((arrayPair) => {
|
|
// eslint-disable-next-line no-restricted-properties
|
|
assert.deepEqual(arrayPair[0], arrayPair[1]);
|
|
assert.deepStrictEqual(arrayPair[0], arrayPair[1]);
|
|
});
|
|
|
|
looseEqualArrayPairs.forEach((arrayPair) => {
|
|
// eslint-disable-next-line no-restricted-properties
|
|
assert.deepEqual(arrayPair[0], arrayPair[1]);
|
|
assert.throws(
|
|
makeBlock(assert.deepStrictEqual, arrayPair[0], arrayPair[1]),
|
|
assert.AssertionError
|
|
);
|
|
});
|
|
|
|
notEqualArrayPairs.forEach((arrayPair) => {
|
|
assert.throws(
|
|
// eslint-disable-next-line no-restricted-properties
|
|
makeBlock(assert.deepEqual, arrayPair[0], arrayPair[1]),
|
|
assert.AssertionError
|
|
);
|
|
assert.throws(
|
|
makeBlock(assert.deepStrictEqual, arrayPair[0], arrayPair[1]),
|
|
assert.AssertionError
|
|
);
|
|
});
|