1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/testDenseToSlowArray.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,185 @@ 1.4 +// test dense -> slow array transitions during the recording and on trace 1.5 +// for various array functions and property accessors 1.6 + 1.7 +function test_set_elem() { 1.8 + 1.9 + function f() { 1.10 + var bag = []; 1.11 + for (var i = 0; i != 100; ++i) { 1.12 + var a = [0]; 1.13 + a[100*100] = i; 1.14 + bag.push(a); 1.15 + } 1.16 + 1.17 + for (var i = 0; i != 100; ++i) { 1.18 + var a = [0]; 1.19 + a[200 + i] = i; 1.20 + bag.push(a); 1.21 + } 1.22 + return bag; 1.23 + } 1.24 + 1.25 + var bag = f(); 1.26 + 1.27 + for (var i = 0; i != 100; ++i) { 1.28 + var a = bag[i]; 1.29 + assertEq(a.length, 100 * 100 + 1); 1.30 + assertEq(a[100*100], i); 1.31 + assertEq(a[0], 0); 1.32 + assertEq(1 + i in a, false); 1.33 + } 1.34 + 1.35 + for (var i = 0; i != 100; ++i) { 1.36 + var a = bag[100 + i]; 1.37 + assertEq(a.length, 200 + i + 1); 1.38 + assertEq(a[200 + i], i); 1.39 + assertEq(a[0], 0); 1.40 + assertEq(1 + i in a, false); 1.41 + } 1.42 +} 1.43 + 1.44 +function test_reverse() { 1.45 + 1.46 + function prepare_arays() { 1.47 + var bag = []; 1.48 + var base_index = 245; 1.49 + for (var i = 0; i != 50; ++i) { 1.50 + var a = [1, 2, 3, 4, 5]; 1.51 + a.length = i + base_index; 1.52 + bag.push(a); 1.53 + } 1.54 + return bag; 1.55 + } 1.56 + 1.57 + function test(bag) { 1.58 + for (var i = 0; i != bag.length; ++i) { 1.59 + var a = bag[i]; 1.60 + a.reverse(); 1.61 + a[0] = 1; 1.62 + } 1.63 + } 1.64 + 1.65 + var bag = prepare_arays(); 1.66 + test(bag); 1.67 + for (var i = 0; i != bag.length; ++i) { 1.68 + var a = bag[i]; 1.69 + assertEq(a[0], 1); 1.70 + for (var j = 1; j <= 5; ++j) { 1.71 + assertEq(a[a.length - j], j); 1.72 + } 1.73 + for (var j = 1; j < a.length - 5; ++j) { 1.74 + assertEq(j in a, false); 1.75 + } 1.76 + } 1.77 + 1.78 +} 1.79 + 1.80 +function test_push() { 1.81 + 1.82 + function prepare_arays() { 1.83 + var bag = []; 1.84 + var base_index = 245; 1.85 + for (var i = 0; i != 50; ++i) { 1.86 + var a = [0]; 1.87 + a.length = i + base_index; 1.88 + bag.push(a); 1.89 + } 1.90 + return bag; 1.91 + } 1.92 + 1.93 + function test(bag) { 1.94 + for (var i = 0; i != bag.length; ++i) { 1.95 + var a = bag[i]; 1.96 + a.push(2); 1.97 + a[0] = 1; 1.98 + } 1.99 + } 1.100 + 1.101 + var bag = prepare_arays(); 1.102 + test(bag); 1.103 + for (var i = 0; i != bag.length; ++i) { 1.104 + var a = bag[i]; 1.105 + assertEq(a[0], 1); 1.106 + assertEq(a[a.length - 1], 2); 1.107 + for (var j = 1; j < a.length - 1; ++j) { 1.108 + assertEq(j in a, false); 1.109 + } 1.110 + } 1.111 +} 1.112 + 1.113 +function test_unshift() { 1.114 + 1.115 + function prepare_arays() { 1.116 + var bag = []; 1.117 + var base_index = 245; 1.118 + for (var i = 0; i != 50; ++i) { 1.119 + var a = [0]; 1.120 + a.length = i + base_index; 1.121 + bag.push(a); 1.122 + } 1.123 + return bag; 1.124 + } 1.125 + 1.126 + function test(bag) { 1.127 + for (var i = 0; i != bag.length; ++i) { 1.128 + var a = bag[i]; 1.129 + a.unshift(1); 1.130 + a[2] = 2; 1.131 + } 1.132 + } 1.133 + 1.134 + var bag = prepare_arays(); 1.135 + test(bag); 1.136 + for (var i = 0; i != bag.length; ++i) { 1.137 + var a = bag[i]; 1.138 + assertEq(a[0], 1); 1.139 + assertEq(a[1], 0); 1.140 + assertEq(a[2], 2); 1.141 + for (var j = 3; j < a.length; ++j) { 1.142 + assertEq(j in a, false); 1.143 + } 1.144 + } 1.145 +} 1.146 + 1.147 +function test_splice() { 1.148 + 1.149 + function prepare_arays() { 1.150 + var bag = []; 1.151 + var base_index = 245; 1.152 + for (var i = 0; i != 50; ++i) { 1.153 + var a = [1, 2]; 1.154 + a.length = i + base_index; 1.155 + bag.push(a); 1.156 + } 1.157 + return bag; 1.158 + } 1.159 + 1.160 + function test(bag) { 1.161 + for (var i = 0; i != bag.length; ++i) { 1.162 + var a = bag[i]; 1.163 + a.splice(1, 0, "a", "b", "c"); 1.164 + a[2] = 100; 1.165 + } 1.166 + } 1.167 + 1.168 + var bag = prepare_arays(); 1.169 + test(bag); 1.170 + for (var i = 0; i != bag.length; ++i) { 1.171 + var a = bag[i]; 1.172 + assertEq(a[0], 1); 1.173 + assertEq(a[1], "a"); 1.174 + assertEq(a[2], 100); 1.175 + assertEq(a[3], "c"); 1.176 + assertEq(a[4], 2); 1.177 + for (var j = 5; j < a.length; ++j) { 1.178 + assertEq(j in a, false); 1.179 + } 1.180 + } 1.181 +} 1.182 + 1.183 +test_set_elem(); 1.184 +test_reverse(); 1.185 +test_push(); 1.186 +test_unshift(); 1.187 +test_splice(); 1.188 +