| Index: test/mjsunit/external-array.js
|
| diff --git a/test/mjsunit/external-array.js b/test/mjsunit/external-array.js
|
| index d02922006a18842d9bbffc66d29c144094b866d4..c28bb3bcdb49a9cf3e6294b54231eafe86d12305 100644
|
| --- a/test/mjsunit/external-array.js
|
| +++ b/test/mjsunit/external-array.js
|
| @@ -27,6 +27,12 @@
|
|
|
| // Flags: --allow-natives-syntax --expose-gc
|
|
|
| +// Helper
|
| +function assertInstance(o, f) {
|
| + assertSame(o.constructor, f);
|
| + assertInstanceof(o, f);
|
| +}
|
| +
|
| // This is a regression test for overlapping key and value registers.
|
| function f(a) {
|
| a[0] = 0;
|
| @@ -51,49 +57,58 @@ assertThrows(abfunc1);
|
|
|
| // Test derivation from an ArrayBuffer
|
| var ab = new ArrayBuffer(12);
|
| +assertInstance(ab, ArrayBuffer);
|
| var derived_uint8 = new Uint8Array(ab);
|
| +assertInstance(derived_uint8, Uint8Array);
|
| assertSame(ab, derived_uint8.buffer);
|
| assertEquals(12, derived_uint8.length);
|
| assertEquals(12, derived_uint8.byteLength);
|
| assertEquals(0, derived_uint8.byteOffset);
|
| assertEquals(1, derived_uint8.BYTES_PER_ELEMENT);
|
| var derived_uint8_2 = new Uint8Array(ab,7);
|
| +assertInstance(derived_uint8_2, Uint8Array);
|
| assertSame(ab, derived_uint8_2.buffer);
|
| assertEquals(5, derived_uint8_2.length);
|
| assertEquals(5, derived_uint8_2.byteLength);
|
| assertEquals(7, derived_uint8_2.byteOffset);
|
| assertEquals(1, derived_uint8_2.BYTES_PER_ELEMENT);
|
| var derived_int16 = new Int16Array(ab);
|
| +assertInstance(derived_int16, Int16Array);
|
| assertSame(ab, derived_int16.buffer);
|
| assertEquals(6, derived_int16.length);
|
| assertEquals(12, derived_int16.byteLength);
|
| assertEquals(0, derived_int16.byteOffset);
|
| assertEquals(2, derived_int16.BYTES_PER_ELEMENT);
|
| var derived_int16_2 = new Int16Array(ab,6);
|
| +assertInstance(derived_int16_2, Int16Array);
|
| assertSame(ab, derived_int16_2.buffer);
|
| assertEquals(3, derived_int16_2.length);
|
| assertEquals(6, derived_int16_2.byteLength);
|
| assertEquals(6, derived_int16_2.byteOffset);
|
| assertEquals(2, derived_int16_2.BYTES_PER_ELEMENT);
|
| var derived_uint32 = new Uint32Array(ab);
|
| +assertInstance(derived_uint32, Uint32Array);
|
| assertSame(ab, derived_uint32.buffer);
|
| assertEquals(3, derived_uint32.length);
|
| assertEquals(12, derived_uint32.byteLength);
|
| assertEquals(0, derived_uint32.byteOffset);
|
| assertEquals(4, derived_uint32.BYTES_PER_ELEMENT);
|
| var derived_uint32_2 = new Uint32Array(ab,4);
|
| +assertInstance(derived_uint32_2, Uint32Array);
|
| assertSame(ab, derived_uint32_2.buffer);
|
| assertEquals(2, derived_uint32_2.length);
|
| assertEquals(8, derived_uint32_2.byteLength);
|
| assertEquals(4, derived_uint32_2.byteOffset);
|
| assertEquals(4, derived_uint32_2.BYTES_PER_ELEMENT);
|
| var derived_uint32_3 = new Uint32Array(ab,4,1);
|
| +assertInstance(derived_uint32_3, Uint32Array);
|
| assertSame(ab, derived_uint32_3.buffer);
|
| assertEquals(1, derived_uint32_3.length);
|
| assertEquals(4, derived_uint32_3.byteLength);
|
| assertEquals(4, derived_uint32_3.byteOffset);
|
| assertEquals(4, derived_uint32_3.BYTES_PER_ELEMENT);
|
| var derived_float64 = new Float64Array(ab,0,1);
|
| +assertInstance(derived_float64, Float64Array);
|
| assertSame(ab, derived_float64.buffer);
|
| assertEquals(1, derived_float64.length);
|
| assertEquals(8, derived_float64.byteLength);
|
| @@ -198,7 +213,7 @@ assertEquals(4, array_with_length_from_non_number.length);
|
|
|
| // Test loads and stores.
|
| types = [Array, Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array,
|
| - Uint32Array, PixelArray, Float32Array, Float64Array];
|
| + Uint32Array, Uint8ClampedArray, Float32Array, Float64Array];
|
|
|
| test_result_nan = [NaN, 0, 0, 0, 0, 0, 0, 0, NaN, NaN];
|
| test_result_low_int = [-1, -1, 255, -1, 65535, -1, 0xFFFFFFFF, 0, -1, -1];
|
| @@ -412,22 +427,113 @@ assertTrue(isNaN(float64_array[0]));
|
|
|
|
|
| // Check handling of 0-sized buffers and arrays.
|
| -
|
| ab = new ArrayBuffer(0);
|
| +assertInstance(ab, ArrayBuffer);
|
| assertEquals(0, ab.byteLength);
|
| a = new Int8Array(ab);
|
| +assertInstance(a, Int8Array);
|
| assertEquals(0, a.byteLength);
|
| assertEquals(0, a.length);
|
| a[0] = 1;
|
| -assertEquals(undefined, a[0])
|
| +assertEquals(undefined, a[0]);
|
| ab = new ArrayBuffer(16);
|
| +assertInstance(ab, ArrayBuffer);
|
| a = new Float32Array(ab,4,0);
|
| +assertInstance(a, Float32Array);
|
| assertEquals(0, a.byteLength);
|
| assertEquals(0, a.length);
|
| a[0] = 1;
|
| -assertEquals(undefined, a[0])
|
| +assertEquals(undefined, a[0]);
|
| a = new Uint16Array(0);
|
| +assertInstance(a, Uint16Array);
|
| assertEquals(0, a.byteLength);
|
| assertEquals(0, a.length);
|
| a[0] = 1;
|
| -assertEquals(undefined, a[0])
|
| +assertEquals(undefined, a[0]);
|
| +
|
| +
|
| +// Check construction from arrays.
|
| +a = new Uint32Array([]);
|
| +assertInstance(a, Uint32Array);
|
| +assertEquals(0, a.length);
|
| +assertEquals(0, a.byteLength);
|
| +assertEquals(0, a.buffer.byteLength);
|
| +assertEquals(4, a.BYTES_PER_ELEMENT);
|
| +a = new Uint16Array([1,2,3]);
|
| +assertInstance(a, Uint16Array);
|
| +assertEquals(3, a.length);
|
| +assertEquals(6, a.byteLength);
|
| +assertEquals(6, a.buffer.byteLength);
|
| +assertEquals(2, a.BYTES_PER_ELEMENT);
|
| +assertEquals(1, a[0]);
|
| +assertEquals(3, a[2]);
|
| +a = new Uint32Array(a);
|
| +assertInstance(a, Uint32Array);
|
| +assertEquals(3, a.length);
|
| +assertEquals(12, a.byteLength);
|
| +assertEquals(12, a.buffer.byteLength);
|
| +assertEquals(4, a.BYTES_PER_ELEMENT);
|
| +assertEquals(1, a[0]);
|
| +assertEquals(3, a[2]);
|
| +
|
| +
|
| +// Check subarrays.
|
| +a = new Uint16Array([1,2,3,4,5,6]);
|
| +aa = a.subarray(3);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(3, aa.length);
|
| +assertEquals(6, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(3,5);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(2, aa.length);
|
| +assertEquals(4, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(4,8);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(2, aa.length);
|
| +assertEquals(4, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(9);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(0, aa.length);
|
| +assertEquals(0, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(-4);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(4, aa.length);
|
| +assertEquals(8, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(-3,-1);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(2, aa.length);
|
| +assertEquals(4, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(3,2);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(0, aa.length);
|
| +assertEquals(0, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(-3,-4);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(0, aa.length);
|
| +assertEquals(0, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +aa = a.subarray(0,-8);
|
| +assertInstance(aa, Uint16Array);
|
| +assertEquals(0, aa.length);
|
| +assertEquals(0, aa.byteLength);
|
| +assertEquals(2, aa.BYTES_PER_ELEMENT);
|
| +assertSame(a.buffer, aa.buffer);
|
| +
|
| +assertThrows(function(){ a.subarray.call({}, 0) });
|
| +assertThrows(function(){ a.subarray.call([], 0) });
|
| +assertThrows(function(){ a.subarray.call(a) });
|
|
|