summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js')
-rw-r--r--js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js b/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js
new file mode 100644
index 000000000..a4e3af08c
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js
@@ -0,0 +1,51 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 898356;
+
+var {StructType, uint32, Object, Any, storage, objectType} = TypedObject;
+
+function main() { // once a C programmer, always a C programmer.
+ print(BUGNUMBER + ": " + summary);
+
+ var Uints = new StructType({f: uint32, g: uint32});
+
+ var anArray = new Uint32Array(4);
+ anArray[1] = 22;
+ anArray[2] = 44;
+
+ var uints = new Uints(anArray.buffer, 4);
+ assertEq(storage(uints).buffer, anArray.buffer);
+ assertEq(uints.f, 22);
+ assertEq(uints.g, 44);
+ uints.f++;
+ assertEq(anArray[1], 23);
+
+ // No misaligned byte offsets or offsets that would stretch past the end:
+ assertThrows(() => new Uints(anArray.buffer, -4)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -3)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -2)); // negative
+ assertThrows(() => new Uints(anArray.buffer, -1)); // negative
+ new Uints(anArray.buffer, 0); // ok
+ assertThrows(() => new Uints(anArray.buffer, 1)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 2)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 3)); // misaligned
+ new Uints(anArray.buffer, 4); // ok
+ assertThrows(() => new Uints(anArray.buffer, 5)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 6)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 7)); // misaligned
+ new Uints(anArray.buffer, 8); // ok
+ assertThrows(() => new Uints(anArray.buffer, 9)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 10)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 11)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 12)); // would extend past end
+ assertThrows(() => new Uints(anArray.buffer, 13)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 14)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 15)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 16)); // would extend past end
+ assertThrows(() => new Uints(anArray.buffer, 17)); // misaligned
+ assertThrows(() => new Uints(anArray.buffer, 4294967292)); // overflows int
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+main();