js/src/jit-test/tests/basic/testDenseToSlowArray.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // test dense -> slow array transitions during the recording and on trace
     2 // for various array functions and property accessors
     4 function test_set_elem() {
     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         }
    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     }
    22     var bag = f();
    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     }
    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 }
    41 function test_reverse() {
    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     }
    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     }
    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     }
    75 }
    77 function test_push() {
    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     }
    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     }
    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 }
   110 function test_unshift() {
   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     }
   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     }
   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 }
   144 function test_splice() {
   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     }
   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     }
   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 }
   180 test_set_elem();
   181 test_reverse();
   182 test_push();
   183 test_unshift();
   184 test_splice();

mercurial