| // |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(); |