| // |reftest| skip-if(!this.hasOwnProperty("TypedObject")) |
| var BUGNUMBER = 578700; |
| var summary = 'TypedObjects memory check'; |
| |
| function spin() { |
| for (var i = 0; i < 10000; i++) |
| ; |
| } |
| |
| var ArrayType = TypedObject.ArrayType; |
| var StructType = TypedObject.StructType; |
| var uint8 = TypedObject.uint8; |
| var uint16 = TypedObject.uint16; |
| var uint32 = TypedObject.uint32; |
| var uint8Clamped = TypedObject.uint8Clamped; |
| var int8 = TypedObject.int8; |
| var int16 = TypedObject.int16; |
| var int32 = TypedObject.int32; |
| var float32 = TypedObject.float32; |
| var float64 = TypedObject.float64; |
| |
| |
| function runTests() { |
| print(BUGNUMBER + ": " + summary); |
| |
| var AA = uint8.array(5, 5); |
| var aa = new AA(); |
| var aa0 = aa[0]; |
| aa[0] = [0,1,2,3,4]; |
| |
| aa = null; |
| |
| gc(); |
| spin(); |
| |
| for (var i = 0; i < aa0.length; i++) |
| assertEq(aa0[i], i); |
| |
| var AAA = AA.array(5); |
| var aaa = new AAA(); |
| var a0 = aaa[0][0]; |
| |
| for (var i = 0; i < a0.length; i++) |
| assertEq(a0[i], 0); |
| |
| aaa[0] = [[0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4]]; |
| |
| aaa = null; |
| |
| gc(); |
| spin(); |
| for (var i = 0; i < a0.length; i++) |
| assertEq(a0[i], i); |
| |
| var Color = new StructType({'r': uint8, 'g': uint8, 'b': uint8}); |
| var Rainbow = Color.array(7); |
| |
| var theOneISawWasJustBlack = new Rainbow([ |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}, |
| {'r': 0, 'g': 0, 'b': 0}]); |
| |
| var middleBand = theOneISawWasJustBlack[3]; |
| theOneISawWasJustBlack = null; |
| gc(); |
| spin(); |
| assertEq(middleBand['r'] == 0 && middleBand['g'] == 0 && middleBand['b'] == 0, true); |
| middleBand.r = 255; |
| middleBand.g = 207; |
| middleBand.b = 142; |
| assertEq(middleBand['r'] == 255 && middleBand['g'] == 207 && middleBand['b'] == 142, true); |
| |
| var scopedType = function() { |
| var Point = new StructType({'x': int32, 'y': int32}); |
| var aPoint = new Point(); |
| aPoint.x = 4; |
| aPoint.y = 5; |
| return aPoint; |
| } |
| |
| var point = scopedType(); |
| gc(); |
| spin(); |
| gc(); |
| assertEq(point.constructor.fieldTypes.x, int32); |
| assertEq(point.constructor.fieldTypes.y, int32); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| print("Tests complete"); |
| } |
| |
| runTests(); |