dictionary-delete-compact.js (1900B)
1 // Stress test dictionary object/map property deletion/addition/compaction. 2 3 const numProps = 1000; 4 5 // Delete a range of properties and check correctness. 6 function deleteRange(deleteStart, deleteEnd) { 7 for (var i = 0; i < numProps; i++) { 8 o["x" + i] = i; 9 } 10 for (var i = deleteStart; i < deleteEnd; i++) { 11 delete o["x" + i]; 12 } 13 assertEq(Object.getOwnPropertyNames(o).length, 14 numProps - (deleteEnd - deleteStart)); 15 for (var i = 0; i < numProps; i++) { 16 if (deleteStart <= i && i < deleteEnd) { 17 assertEq(("x" + i) in o, false); 18 } else { 19 assertEq(o["x" + i], i); 20 } 21 } 22 } 23 24 // For every "stride" properties, delete all of them except one. 25 function deleteMany(stride) { 26 for (var i = 0; i < numProps; i++) { 27 o["x" + i] = i; 28 } 29 var propsNotDeleted = 0; 30 for (var i = 0; i < numProps; i++) { 31 if ((i % stride) === 1) { 32 propsNotDeleted++; 33 continue; 34 } 35 delete o["x" + i]; 36 } 37 assertEq(Object.getOwnPropertyNames(o).length, propsNotDeleted); 38 for (var i = 0; i < numProps; i++) { 39 if ((i % stride) !== 1) { 40 assertEq(("x" + i) in o, false); 41 } else { 42 assertEq(o["x" + i], i); 43 } 44 } 45 } 46 47 var o = {}; 48 49 function test(useFreshObject) { 50 function testOne(f) { 51 if (useFreshObject) { 52 o = {}; 53 } 54 f(); 55 } 56 57 for (var i = 6; i < 12; i++) { 58 testOne(_ => deleteRange(i, 1000)); 59 } 60 testOne(_ => deleteRange(100, 1000)); 61 testOne(_ => deleteRange(0, 1000)); 62 testOne(_ => deleteRange(1, 1000)); 63 testOne(_ => deleteRange(8, 990)); 64 65 testOne(_ => deleteMany(3)); 66 testOne(_ => deleteMany(7)); 67 testOne(_ => deleteMany(8)); 68 testOne(_ => deleteMany(15)); 69 testOne(_ => deleteMany(111)); 70 } 71 72 test(true); 73 o = {}; 74 test(false);