tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);