| if (!this.hasOwnProperty("TypedObject")) |
| quit(); |
| |
| var TO = TypedObject; |
| |
| var PointType = new TO.StructType({x: TO.int32, y: TO.int32}); |
| var LineType = new TO.StructType({from: PointType, to: PointType}); |
| |
| function testBasic(how) { |
| var line = new LineType(); |
| var from = line.from; |
| var to = line.to; |
| TO.storage(to).buffer.expando = "hello"; |
| var dataview = new DataView(TO.storage(from).buffer); |
| line.from.x = 12; |
| line.to.x = 3; |
| if (how == 1) |
| minorgc(); |
| else if (how == 2) |
| gc(); |
| assertEq(from.x, 12); |
| assertEq(from.y, 0); |
| assertEq(to.x, 3); |
| assertEq(to.y, 0); |
| assertEq(TO.storage(to).byteOffset, 8); |
| dataview.setInt32(8, 10, true); |
| assertEq(to.x, 10); |
| assertEq(TO.storage(line).buffer.expando, "hello"); |
| } |
| for (var i = 0; i < 5; i++) |
| testBasic(0); |
| for (var i = 0; i < 5; i++) |
| testBasic(1); |
| for (var i = 0; i < 5; i++) |
| testBasic(2); |