tor-browser

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

add-dense-element.js (2223B)


      1 // Add dense elements to packed and non-packed arrays. Cover both mono- and
      2 // polymorphic call sites.
      3 
      4 function testAddDenseEmpty() {
      5  var array = [];
      6 
      7  function store(ar, index) {
      8    ar[index] = index;
      9  }
     10 
     11  for (var i = 0; i < 10; ++i) {
     12    store(array, i);
     13  }
     14 
     15  assertEq(array.length, 10);
     16  for (var i = 0; i < 10; ++i) {
     17    assertEq(array[i], i);
     18  }
     19 }
     20 testAddDenseEmpty();
     21 
     22 function testAddDensePacked() {
     23  var array = [0, 1];
     24 
     25  function store(ar, index) {
     26    ar[index] = index;
     27  }
     28 
     29  for (var i = 2; i < 10; ++i) {
     30    store(array, i);
     31  }
     32 
     33  assertEq(array.length, 10);
     34  for (var i = 0; i < 10; ++i) {
     35    assertEq(array[i], i);
     36  }
     37 }
     38 testAddDensePacked();
     39 
     40 function testAddDenseNonPacked() {
     41  var array = [/* hole */, 1];
     42 
     43  function store(ar, index) {
     44    ar[index] = index;
     45  }
     46 
     47  for (var i = 2; i < 10; ++i) {
     48    store(array, i);
     49  }
     50 
     51  assertEq(array.length, 10);
     52  assertEq(0 in array, false);
     53  for (var i = 1; i < 10; ++i) {
     54    assertEq(array[i], i);
     55  }
     56 }
     57 testAddDenseNonPacked();
     58 
     59 function testAddDenseEmptyPoly() {
     60  var array = [];
     61 
     62  function store(ar, index) {
     63    ar[index] = index;
     64  }
     65 
     66  var objects = [array, {}];
     67 
     68  for (var i = 0; i < 10; ++i) {
     69    for (var j = 0; j < objects.length; ++j) {
     70      store(objects[j], i);
     71    }
     72  }
     73 
     74  assertEq(array.length, 10);
     75  for (var i = 0; i < 10; ++i) {
     76    assertEq(array[i], i);
     77  }
     78 }
     79 testAddDenseEmptyPoly();
     80 
     81 function testAddDensePackedPoly() {
     82  var array = [0, 1];
     83 
     84  function store(ar, index) {
     85    ar[index] = index;
     86  }
     87 
     88  var objects = [array, {}];
     89 
     90  for (var i = 2; i < 10; ++i) {
     91    for (var j = 0; j < objects.length; ++j) {
     92      store(objects[j], i);
     93    }
     94  }
     95 
     96  assertEq(array.length, 10);
     97  for (var i = 0; i < 10; ++i) {
     98    assertEq(array[i], i);
     99  }
    100 }
    101 testAddDensePackedPoly();
    102 
    103 function testAddDenseNonPackedPoly() {
    104  var array = [/* hole */, 1];
    105 
    106  function store(ar, index) {
    107    ar[index] = index;
    108  }
    109 
    110  var objects = [array, {}];
    111 
    112  for (var i = 2; i < 10; ++i) {
    113    for (var j = 0; j < objects.length; ++j) {
    114      store(objects[j], i);
    115    }
    116  }
    117 
    118  assertEq(array.length, 10);
    119  assertEq(0 in array, false);
    120  for (var i = 1; i < 10; ++i) {
    121    assertEq(array[i], i);
    122  }
    123 }
    124 testAddDenseNonPackedPoly();