michael@0: michael@0: function makeThing(i) michael@0: { michael@0: var thing = {}; michael@0: thing.foo = i; michael@0: thing.bar = "bar_" + i; michael@0: Object.defineProperty(thing, 'baz', {'configurable':false, 'value':[i]}); michael@0: return thing; michael@0: } michael@0: function makeArray(count) michael@0: { michael@0: var arr = new Array(count); michael@0: for(var i = 0; i < count; i++) { michael@0: arr[i] = makeThing(i); michael@0: } michael@0: return arr; michael@0: } michael@0: function delBar(obj) michael@0: { michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'bar') === undefined, false); michael@0: assertEq(delete obj.bar, true); michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'bar') === undefined, true); michael@0: } michael@0: function delBaz(obj) michael@0: { michael@0: var s = delete obj.baz; michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'baz') === undefined, false); michael@0: assertEq(delete obj.baz, false); michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'baz') === undefined, false); michael@0: } michael@0: function delNonexistentThingy(obj) michael@0: { michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'thingy') === undefined, true); michael@0: assertEq(delete obj.thingy, true); michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'thingy') === undefined, true); michael@0: } michael@0: function testDelProp() michael@0: { michael@0: var arr = makeArray(10000); michael@0: for(var i = 0; i < 10000; i++) { michael@0: var obj = arr[i]; michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'foo') === undefined, false); michael@0: assertEq(delete obj.foo, true); michael@0: assertEq(Object.getOwnPropertyDescriptor(obj, 'foo') === undefined, true); michael@0: delBar(obj); michael@0: delBaz(obj); michael@0: delNonexistentThingy(obj); michael@0: } michael@0: } michael@0: michael@0: testDelProp();