diff options
Diffstat (limited to 'js/src/jit-test/lib/dataview.js')
-rw-r--r-- | js/src/jit-test/lib/dataview.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/js/src/jit-test/lib/dataview.js b/js/src/jit-test/lib/dataview.js new file mode 100644 index 0000000000..68228f324b --- /dev/null +++ b/js/src/jit-test/lib/dataview.js @@ -0,0 +1,82 @@ +function typeName(typedArrayCtor) { + return typedArrayCtor.name.slice(0, -"Array".length); +} + +const nativeIsLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + +function toEndianess(type, v, littleEndian) { + // Disable Ion compilation to call the native, non-inlined DataView functions. + with ({}); // no-ion + assertEq(inIon() !== true, true); + + let dv = new DataView(new ArrayBuffer(type.BYTES_PER_ELEMENT)); + + let name = typeName(type); + dv[`set${name}`](0, v, nativeIsLittleEndian); + return dv[`get${name}`](0, littleEndian); +} + +function toLittleEndian(type, v) { + return toEndianess(type, v, true); +} + +function toBigEndian(type, v) { + return toEndianess(type, v, false); +} + +// Shared test data for various DataView tests. +function createTestData() { + const tests = [ + { + type: Int8Array, + values: [-128, -127, -2, -1, 0, 1, 2, 126, 127], + }, + { + type: Uint8Array, + values: [0, 1, 2, 126, 127, 128, 254, 255], + }, + { + type: Int16Array, + values: [-32768, -32767, -2, -1, 0, 1, 2, 32766, 32767], + }, + { + type: Uint16Array, + values: [0, 1, 2, 32766, 32767, 32768, 65534, 65535], + }, + { + type: Int32Array, + values: [-2147483648, -2147483647, -2, -1, 0, 1, 2, 2147483646, 2147483647], + }, + { + type: Uint32Array, + values: [0, 1, 2, 2147483646, 2147483647], // Representable as Int32 + }, + { + type: Uint32Array, + values: [0, 1, 2, 2147483646, 2147483647, 2147483648, 4294967294, 4294967295], + }, + { + type: Float32Array, + values: [-NaN, -Infinity, -0.5, -0, +0, 0.5, Infinity, NaN], + }, + { + type: Float64Array, + values: [-NaN, -Infinity, -0.5, -0, +0, 0.5, Infinity, NaN], + }, + { + type: BigInt64Array, + values: [-9223372036854775808n, -9223372036854775807n, -2n, -1n, 0n, 1n, 2n, 9223372036854775806n, 9223372036854775807n], + }, + { + type: BigUint64Array, + values: [0n, 1n, 2n, 9223372036854775806n, 9223372036854775807n, 9223372036854775808n, 18446744073709551614n, 18446744073709551615n], + }, + ]; + + tests.forEach(data => { + data.littleEndian = data.values.map(v => toLittleEndian(data.type, v)); + data.bigEndian = data.values.map(v => toBigEndian(data.type, v)); + }); + + return tests; +} |