tor-browser

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

testDenseToSlowArray.js (4105B)


      1 // test dense -> slow array transitions during the recording and on trace
      2 // for various array functions and property accessors
      3 
      4 function test_set_elem() {
      5 
      6    function f() {
      7        var bag = [];
      8        for (var i = 0; i != 100; ++i) {
      9            var a = [0];
     10            a[100*100] = i;
     11            bag.push(a);
     12        }
     13        
     14        for (var i = 0; i != 100; ++i) {
     15            var a = [0];
     16            a[200 + i] = i;
     17            bag.push(a);
     18        }
     19        return bag;
     20    }
     21    
     22    var bag = f();
     23    
     24    for (var i = 0; i != 100; ++i) {
     25        var a = bag[i];
     26        assertEq(a.length, 100 * 100 + 1);
     27        assertEq(a[100*100], i);
     28        assertEq(a[0], 0);
     29        assertEq(1 + i in a, false);
     30    }
     31    
     32    for (var i = 0; i != 100; ++i) {
     33        var a = bag[100 + i];
     34        assertEq(a.length, 200 + i + 1);
     35        assertEq(a[200 + i], i);
     36        assertEq(a[0], 0);
     37        assertEq(1 + i in a, false);
     38    }
     39 }
     40 
     41 function test_reverse() {
     42 
     43    function prepare_arays() {
     44        var bag = [];
     45        var base_index = 245;
     46        for (var i = 0; i != 50; ++i) {
     47            var a = [1, 2, 3, 4, 5];
     48            a.length = i + base_index;
     49            bag.push(a);
     50        }
     51        return bag;
     52    }
     53 
     54    function test(bag) {
     55        for (var i = 0; i != bag.length; ++i) {
     56            var a = bag[i];
     57            a.reverse();
     58            a[0] = 1;
     59        }
     60    }
     61 
     62    var bag = prepare_arays();
     63    test(bag);
     64    for (var i = 0; i != bag.length; ++i) {
     65        var a = bag[i];
     66        assertEq(a[0], 1);
     67        for (var j = 1; j <= 5; ++j) {
     68            assertEq(a[a.length - j], j);
     69        }
     70        for (var j = 1; j < a.length - 5; ++j) {
     71            assertEq(j in a, false);
     72        }
     73    }
     74    
     75 }
     76 
     77 function test_push() {
     78 
     79    function prepare_arays() {
     80        var bag = [];
     81        var base_index = 245;
     82        for (var i = 0; i != 50; ++i) {
     83            var a = [0];
     84            a.length = i + base_index;
     85            bag.push(a);
     86        }
     87        return bag;
     88    }
     89 
     90    function test(bag) {
     91        for (var i = 0; i != bag.length; ++i) {
     92            var a = bag[i];
     93            a.push(2);
     94            a[0] = 1;
     95        }
     96    }
     97 
     98    var bag = prepare_arays();
     99    test(bag);
    100    for (var i = 0; i != bag.length; ++i) {
    101        var a = bag[i];
    102        assertEq(a[0], 1); 
    103        assertEq(a[a.length - 1], 2);
    104        for (var j = 1; j < a.length - 1; ++j) {
    105            assertEq(j in a, false);
    106        }
    107    }
    108 }
    109 
    110 function test_unshift() {
    111 
    112    function prepare_arays() {
    113        var bag = [];
    114        var base_index = 245;
    115        for (var i = 0; i != 50; ++i) {
    116            var a = [0];
    117            a.length = i + base_index;
    118            bag.push(a);
    119        }
    120        return bag;
    121    }
    122 
    123    function test(bag) {
    124        for (var i = 0; i != bag.length; ++i) {
    125            var a = bag[i];
    126            a.unshift(1);
    127            a[2] = 2;
    128        }
    129    }
    130 
    131    var bag = prepare_arays();
    132    test(bag);
    133    for (var i = 0; i != bag.length; ++i) {
    134        var a = bag[i];
    135        assertEq(a[0], 1); 
    136        assertEq(a[1], 0); 
    137        assertEq(a[2], 2); 
    138        for (var j = 3; j < a.length; ++j) {
    139            assertEq(j in a, false);
    140        }
    141    }
    142 }
    143 
    144 function test_splice() {
    145 
    146    function prepare_arays() {
    147        var bag = [];
    148        var base_index = 245;
    149        for (var i = 0; i != 50; ++i) {
    150            var a = [1, 2];
    151            a.length = i + base_index;
    152            bag.push(a);
    153        }
    154        return bag;
    155    }
    156 
    157    function test(bag) {
    158        for (var i = 0; i != bag.length; ++i) {
    159            var a = bag[i];
    160            a.splice(1, 0, "a", "b", "c");
    161            a[2] = 100;
    162        }
    163    }
    164 
    165    var bag = prepare_arays();
    166    test(bag);
    167    for (var i = 0; i != bag.length; ++i) {
    168        var a = bag[i];
    169        assertEq(a[0], 1); 
    170        assertEq(a[1], "a"); 
    171        assertEq(a[2], 100); 
    172        assertEq(a[3], "c"); 
    173        assertEq(a[4], 2); 
    174        for (var j = 5; j < a.length; ++j) {
    175            assertEq(j in a, false);
    176        }
    177    }
    178 }
    179 
    180 test_set_elem();
    181 test_reverse();
    182 test_push();
    183 test_unshift();
    184 test_splice();