// Based on tests/ion/typed-arrays-1.js, but with string indexes function testInt8() { var arr1 = new Int8Array(50); var arr2 = new Uint8Array(50); var arr3 = new Uint8ClampedArray(50);
for (var i=0; i<arr1.length; i++) {
arr1[i] = arr2[i] = arr3[i] = i * 8;
} var res = 0; for (var i=0; i<arr1.length; i++) {
res += arr1[i+""] + arr2[i+""] + arr3[i+""] + arr2["10".concat("")];
}
assertEq(res, 18334);
}
testInt8();
function testInt16() { var arr1 = new Int16Array(70); var arr2 = new Uint16Array(70);
for (var i=0; i<arr1.length; i++) {
arr1[i] = arr2[i] = i * 1000;
} var res = 0; for (var i=0; i<arr1.length; i++) {
res += arr1[i+""] + arr2[i+""] + arr2["1".concat("")] + arr1["3".concat("")];
}
assertEq(res, 2423024);
}
testInt16();
function testInt32() { var arr = new Int32Array(60);
arr[0] = -50; for (var i=1; i<arr.length; i++) {
arr[i] = arr[(i-1)+""] + arr["0".concat("")];
++arr[0];
}
assertEq(arr[(arr.length-1)+""], -1289);
}
testInt32();
function testUint32() { function sum(arr) { var res = 0; for (var i=0; i<arr.length; i++) {
res += arr[i+""];
} return res;
} var arr = new Uint32Array(100); for (var i=0; i<arr.length; i++) {
arr[i] = i;
}
// Compile sum() to read int32 values.
assertEq(sum(arr), 4950);
// Add a large uint32 so that the sum no longer fits in an // int32. sum() should be recompiled to return a double.
arr[50] = 0xffffeeee;
assertEq(sum(arr), 4294967826);
}
testUint32();
function testFloat() { var arr1 = new Float32Array(75); var arr2 = new Float64Array(75);
arr1[0] = arr2[0] = Math.PI * 1234567.8;
function testCanonicalNaN() { // NaN values have to be canonicalized. Otherwise, malicious scripts could // construct arbitrary Value's (due to our NaN boxing Value representation). var buf = new ArrayBuffer(16); var uint32 = new Uint32Array(buf); var f64 = new Float64Array(buf); var f32 = new Float32Array(buf);
// Evil: write a JSVAL_TYPE_OBJECT type tag...
uint32[0] = 0xffffff87;
uint32[1] = 0xffffff87;
// Make sure this value is interpreted as a double. for (var i=0; i<3; i++) {
assertEq(isNaN(f64["0".concat("")]), true);
assertEq(isNaN(f32["0".concat("")]), true);
}
}
testCanonicalNaN();
function testOutOfBounds() { var buf = new ArrayBuffer(16); var uint32 = new Uint32Array(buf);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.