Index: test/mjsunit/harmony/typedarrays.js |
diff --git a/test/mjsunit/harmony/typedarrays.js b/test/mjsunit/harmony/typedarrays.js |
index 9b01ba60e8f147c7023eb140d3d84b41ea1936f9..75ff3da42ed4d0362e5a08edc0d2410555ad7752 100644 |
--- a/test/mjsunit/harmony/typedarrays.js |
+++ b/test/mjsunit/harmony/typedarrays.js |
@@ -27,6 +27,8 @@ |
// Flags: --harmony-typed-arrays |
+// ArrayBuffer |
+ |
function TestByteLength(param, expectedByteLength) { |
var ab = new __ArrayBuffer(param); |
assertSame(expectedByteLength, ab.byteLength); |
@@ -104,8 +106,98 @@ function TestArrayBufferSlice() { |
TestArrayBufferSlice(); |
+// Typed arrays |
+ |
+function TestTypedArray(proto, elementSize, typicalElement) { |
+ var ab = new __ArrayBuffer(256*elementSize); |
+ |
+ var a1 = new proto(ab, 128*elementSize, 128); |
+ assertSame(ab, a1.buffer); |
+ assertSame(elementSize, a1.BYTES_PER_ELEMENT); |
+ assertSame(128, a1.length); |
+ assertSame(128*elementSize, a1.byteLength); |
+ assertSame(128*elementSize, a1.byteOffset); |
+ |
+ |
+ var a2 = new proto(ab, 64*elementSize, 128); |
+ assertSame(ab, a2.buffer); |
+ assertSame(elementSize, a2.BYTES_PER_ELEMENT); |
+ assertSame(128, a2.length); |
+ assertSame(128*elementSize, a2.byteLength); |
+ assertSame(64*elementSize, a2.byteOffset); |
+ |
+ var a3 = new proto(ab, 192*elementSize); |
+ assertSame(ab, a3.buffer); |
+ assertSame(64, a3.length); |
+ assertSame(64*elementSize, a3.byteLength); |
+ assertSame(192*elementSize, a3.byteOffset); |
+ |
+ var a4 = new proto(ab); |
+ assertSame(ab, a4.buffer); |
+ assertSame(256, a4.length); |
+ assertSame(256*elementSize, a4.byteLength); |
+ assertSame(0, a4.byteOffset); |
+ |
+ |
+ var i; |
+ for (i = 0; i < 128; i++) { |
+ a1[i] = typicalElement; |
+ } |
+ |
+ for (i = 0; i < 128; i++) { |
+ assertSame(typicalElement, a1[i]); |
+ } |
+ |
+ for (i = 0; i < 64; i++) { |
+ assertSame(0, a2[i]); |
+ } |
+ |
+ for (i = 64; i < 128; i++) { |
+ assertSame(typicalElement, a2[i]); |
+ } |
+ |
+ for (i = 0; i < 64; i++) { |
+ assertSame(typicalElement, a3[i]); |
+ } |
+ |
+ for (i = 0; i < 128; i++) { |
+ assertSame(0, a4[i]); |
+ } |
+ |
+ for (i = 128; i < 256; i++) { |
+ assertSame(typicalElement, a4[i]); |
+ } |
+ |
+ assertThrows(function () { new proto(ab, 256*elementSize); }, RangeError); |
+ |
+ if (elementSize !== 1) { |
+ assertThrows(function() { new proto(ab, 128*elementSize - 1, 10); }, |
+ RangeError); |
+ var unalignedArrayBuffer = new __ArrayBuffer(10*elementSize + 1); |
+ var goodArray = new proto(unalignedArrayBuffer, 0, 10); |
+ assertSame(10, goodArray.length); |
+ assertSame(10*elementSize, goodArray.byteLength); |
+ assertThrows(function() { new proto(unalignedArrayBuffer)}, RangeError); |
+ assertThrows(function() { new proto(unalignedArrayBuffer, 5*elementSize)}, |
+ RangeError); |
+ } |
+ |
+} |
+ |
+TestTypedArray(__Uint8Array, 1, 0xFF); |
+TestTypedArray(__Int8Array, 1, -0x7F); |
+TestTypedArray(__Uint16Array, 2, 0xFFFF); |
+TestTypedArray(__Int16Array, 2, -0x7FFF); |
+TestTypedArray(__Uint32Array, 4, 0xFFFFFFFF); |
+TestTypedArray(__Int32Array, 4, -0x7FFFFFFF); |
+TestTypedArray(__Float32Array, 4, 0.5); |
+TestTypedArray(__Float64Array, 8, 0.5); |
+ |
+ |
+// General tests for properties |
+ |
// Test property attribute [[Enumerable]] |
-function TestEnumerable(func) { |
+function TestEnumerable(func, obj) { |
function props(x) { |
var array = []; |
for (var p in x) array.push(p); |
@@ -113,9 +205,11 @@ function TestEnumerable(func) { |
} |
assertArrayEquals([], props(func)); |
assertArrayEquals([], props(func.prototype)); |
- assertArrayEquals([], props(new func())); |
+ if (obj) |
+ assertArrayEquals([], props(obj)); |
} |
-TestEnumerable(__ArrayBuffer); |
+TestEnumerable(__ArrayBuffer, new __ArrayBuffer()); |
+TestEnumerable(__Uint8Array); |
// Test arbitrary properties on ArrayBuffer |
@@ -131,6 +225,5 @@ function TestArbitrary(m) { |
} |
TestArbitrary(new __ArrayBuffer(256)); |
- |
// Test direct constructor call |
assertTrue(__ArrayBuffer() instanceof __ArrayBuffer); |