mirror of
https://github.com/tc39/test262.git
synced 2025-05-04 06:50:32 +02:00
306 lines
7.7 KiB
JavaScript
306 lines
7.7 KiB
JavaScript
"use strict";
|
|
|
|
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad!");
|
|
}
|
|
|
|
function test1() {
|
|
function bigEndian(o, i) {
|
|
return o.getInt32(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getInt32(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getInt32(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Int32Array(ab);
|
|
ta[0] = 0x01020304;
|
|
let dv = new DataView(ab);
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0x04030201);
|
|
assert(littleEndian(dv, 0) === 0x01020304);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0x01020304);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0x04030201);
|
|
}
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0x04030201);
|
|
assert(littleEndian(dv, 0) === 0x01020304);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0x01020304);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0x04030201);
|
|
}
|
|
|
|
// Make sure we get the right sign.
|
|
ta[0] = -32361386; // 0xfe123456
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0x563412fe);
|
|
assert(littleEndian(dv, 0) === -32361386);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === -32361386);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0x563412fe);
|
|
}
|
|
|
|
// -2146290602 == (int)0x80123456
|
|
ta[0] = 0x56341280;
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === -2146290602);
|
|
assert(littleEndian(dv, 0) === 0x56341280);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0x56341280);
|
|
else
|
|
assert(biEndian(dv, 0, false) === -2146290602);
|
|
}
|
|
}
|
|
test1();
|
|
|
|
function test2() {
|
|
function bigEndian(o, i) {
|
|
return o.getInt16(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getInt16(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getInt16(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(2);
|
|
let ta = new Int16Array(ab);
|
|
ta[0] = 0x0102;
|
|
let dv = new DataView(ab);
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0x0201);
|
|
assert(littleEndian(dv, 0) === 0x0102);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0x0102);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0x0201);
|
|
}
|
|
|
|
// Check sign.
|
|
ta[0] = -512; // 0xfe00
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0x00fe);
|
|
assert(littleEndian(dv, 0) === -512);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === -512);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0x00fe);
|
|
}
|
|
|
|
// Check sign extension.
|
|
ta[0] = 0x00fe;
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === -512);
|
|
assert(littleEndian(dv, 0) === 0x00fe);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0x00fe);
|
|
else
|
|
assert(biEndian(dv, 0, false) === -512);
|
|
}
|
|
}
|
|
test2();
|
|
|
|
function test3() {
|
|
function bigEndian(o, i) {
|
|
return o.getFloat32(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getFloat32(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getFloat32(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Float32Array(ab);
|
|
const normal = 12912.403; // 0x4649c19d
|
|
const normalAsDouble = 12912.403320312500;
|
|
|
|
const flipped = -5.1162437589918884e-21;
|
|
ta[0] = normal;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === flipped);
|
|
assert(littleEndian(dv, 0) === 12912.403320312500);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === normalAsDouble);
|
|
else
|
|
assert(biEndian(dv, 0, false) === flipped);
|
|
}
|
|
}
|
|
test3();
|
|
|
|
function test4() {
|
|
function bigEndian(o, i) {
|
|
return o.getUint32(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getUint32(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getUint32(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Uint32Array(ab);
|
|
ta[0] = 0xa0b0d0f0;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(bigEndian(dv, 0) === 0xf0d0b0a0);
|
|
assert(littleEndian(dv, 0) === 0xa0b0d0f0);
|
|
if (i % 2)
|
|
assert(biEndian(dv, 0, true) === 0xa0b0d0f0);
|
|
else
|
|
assert(biEndian(dv, 0, false) === 0xf0d0b0a0);
|
|
}
|
|
}
|
|
test4();
|
|
|
|
function test5() {
|
|
function bigEndian(o, i) {
|
|
return o.getUint16(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getUint16(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getUint16(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Uint32Array(ab);
|
|
ta[0] = 0xa0b0d0f0;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(littleEndian(dv, 0) == 0xd0f0);
|
|
assert(bigEndian(dv, 0) == 0xf0d0);
|
|
|
|
assert(littleEndian(dv, 1) == 0xb0d0);
|
|
assert(bigEndian(dv, 1) == 0xd0b0);
|
|
|
|
assert(littleEndian(dv, 2) == 0xa0b0);
|
|
assert(bigEndian(dv, 2) == 0xb0a0);
|
|
|
|
assert(biEndian(dv, 0, true) == 0xd0f0);
|
|
assert(biEndian(dv, 0, false) == 0xf0d0);
|
|
|
|
assert(biEndian(dv, 1, true) == 0xb0d0);
|
|
assert(biEndian(dv, 1, false) == 0xd0b0);
|
|
|
|
assert(biEndian(dv, 2, true) == 0xa0b0);
|
|
assert(biEndian(dv, 2, false) == 0xb0a0);
|
|
}
|
|
}
|
|
test5();
|
|
|
|
function test6() {
|
|
function bigEndian(o, i) {
|
|
return o.getInt16(i, false);
|
|
}
|
|
noInline(bigEndian);
|
|
function littleEndian(o, i) {
|
|
return o.getInt16(i, true);
|
|
}
|
|
noInline(littleEndian);
|
|
function biEndian(o, i, b) {
|
|
return o.getInt16(i, b);
|
|
}
|
|
noInline(biEndian);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Uint32Array(ab);
|
|
ta[0] = 0xa070fa01;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(littleEndian(dv, 0) == -1535);
|
|
assert(bigEndian(dv, 0) == 0x01fa);
|
|
|
|
assert(littleEndian(dv, 1) == 0x70fa);
|
|
assert(bigEndian(dv, 1) == -1424);
|
|
|
|
assert(littleEndian(dv, 2) == -24464);
|
|
assert(bigEndian(dv, 2) == 0x70a0);
|
|
|
|
assert(biEndian(dv, 0, true) == -1535);
|
|
assert(biEndian(dv, 0, false) == 0x01fa);
|
|
|
|
assert(biEndian(dv, 1, true) == 0x70fa);
|
|
assert(biEndian(dv, 1, false) == -1424);
|
|
|
|
assert(biEndian(dv, 2, true) == -24464);
|
|
assert(biEndian(dv, 2, false) == 0x70a0);
|
|
}
|
|
}
|
|
test6();
|
|
|
|
function test7() {
|
|
function load(o, i) {
|
|
return o.getInt8(i);
|
|
}
|
|
noInline(load);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Uint32Array(ab);
|
|
ta[0] = 0xa070fa01;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(load(dv, 0) === 0x01);
|
|
assert(load(dv, 1) === -6);
|
|
assert(load(dv, 2) === 0x70);
|
|
assert(load(dv, 3) === -96);
|
|
}
|
|
}
|
|
test7();
|
|
|
|
function test8() {
|
|
function load(o, i) {
|
|
return o.getUint8(i);
|
|
}
|
|
noInline(load);
|
|
|
|
let ab = new ArrayBuffer(4);
|
|
let ta = new Uint32Array(ab);
|
|
ta[0] = 0xa070fa01;
|
|
|
|
let dv = new DataView(ab);
|
|
for (let i = 0; i < 10000; ++i) {
|
|
assert(load(dv, 0) === 0x01);
|
|
assert(load(dv, 1) === 0xfa);
|
|
assert(load(dv, 2) === 0x70);
|
|
assert(load(dv, 3) === 0xa0)
|
|
}
|
|
}
|
|
test8();
|