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