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