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) }); |