Created
September 22, 2021 07:28
-
-
Save famzah/ab6e9202fea64898ab36eb2daf1074cb to your computer and use it in GitHub Desktop.
Prove that we can compare ArrayBuffer variables by casting them to a Uint8Array TypedArray view
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// in regards to: https://github.com/inspect-js/node-deep-equal/issues/94 | |
/* global console */ | |
/* eslint-disable no-console */ | |
/* global ArrayBuffer */ | |
/* global Uint8Array */ | |
/* global Float32Array */ | |
/* global Float64Array */ | |
/* global Uint32Array */ | |
import deepEqual from "deep-equal"; | |
function dump_buffer_in_different_representations(buffer) { | |
console.dir(buffer); | |
console.dir(new Uint8Array(buffer)); | |
console.dir(new Uint32Array(buffer)); | |
console.dir(new Float32Array(buffer)); | |
console.dir(new Float64Array(buffer)); | |
} | |
function assign_single_value_to_ArrayBuffer(buffer) { | |
const bigview = new Uint32Array(buffer); | |
bigview[1] = 20000000000020; // this is a 4-bytes value at position 1 (starting is 0) | |
bigview[9999] = 20000000000020; // this "out of bounds" assignment is simply ignored by Node.js :) | |
} | |
const buffer1 = new ArrayBuffer(8); // initial value of 0's | |
const buffer2 = new ArrayBuffer(16); // initial value of 0's | |
const buffer3 = new ArrayBuffer(8); // initial value of 0's | |
console.log("** Listing the representations of the empty buffer:\n"); | |
dump_buffer_in_different_representations(buffer1); | |
assign_single_value_to_ArrayBuffer(buffer1); | |
assign_single_value_to_ArrayBuffer(buffer2); | |
console.log("\n** Listing the representations of the buffer with data:\n"); | |
dump_buffer_in_different_representations(buffer1); | |
console.log("\n** Dumping all ArrayBuffers:"); | |
console.dir(buffer1); | |
console.dir(buffer2); | |
console.dir(buffer3); | |
console.log("\n** Are two ArrayBuffers with the same length but different data equal?"); | |
console.log( | |
deepEqual( | |
new Uint8Array(buffer1), | |
new Uint8Array(buffer3) // all values are 0's | |
) | |
); | |
console.log("** Are two ArrayBuffers with the same data but different length equal?"); | |
console.log( | |
deepEqual( | |
new Uint8Array(buffer1), | |
new Uint8Array(buffer2) // same value as "buffer1" but with double length | |
) | |
); | |
console.log("** Is the same ArrayBuffer equal?"); | |
console.log( | |
deepEqual( | |
new Uint8Array(buffer1), | |
new Uint8Array(buffer1) | |
) | |
); | |
/* This outputs the following: | |
** Listing the representations of the empty buffer: | |
ArrayBuffer { | |
[Uint8Contents]: <00 00 00 00 00 00 00 00>, | |
byteLength: 8 | |
} | |
Uint8Array(8) [ | |
0, 0, 0, 0, | |
0, 0, 0, 0 | |
] | |
Uint32Array(2) [ 0, 0 ] | |
Float32Array(2) [ 0, 0 ] | |
Float64Array(1) [ 0 ] | |
** Listing the representations of the buffer with data: | |
ArrayBuffer { | |
[Uint8Contents]: <00 00 00 00 14 40 e5 9c>, | |
byteLength: 8 | |
} | |
Uint8Array(8) [ | |
0, 0, 0, 0, | |
20, 64, 229, 156 | |
] | |
Uint32Array(2) [ 0, 2632269844 ] | |
Float32Array(2) [ 0, -1.5170512629061701e-21 ] | |
Float64Array(1) [ -1.75961486096292e-169 ] | |
** Dumping all ArrayBuffers: | |
ArrayBuffer { | |
[Uint8Contents]: <00 00 00 00 14 40 e5 9c>, | |
byteLength: 8 | |
} | |
ArrayBuffer { | |
[Uint8Contents]: <00 00 00 00 14 40 e5 9c 00 00 00 00 00 00 00 00>, | |
byteLength: 16 | |
} | |
ArrayBuffer { | |
[Uint8Contents]: <00 00 00 00 00 00 00 00>, | |
byteLength: 8 | |
} | |
** Are two ArrayBuffers with the same length but different data equal? | |
false | |
** Are two ArrayBuffers with the same data but different length equal? | |
false | |
** Is the same ArrayBuffer equal? | |
true | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment