diff options
Diffstat (limited to 'js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js')
-rw-r--r-- | js/src/tests/ecma_7/TypedObject/atopbufferwithoffset.js | 51 |
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(); |