| // test dense -> slow array transitions during the recording and on trace |
| // for various array functions and property accessors |
| |
| function test_set_elem() { |
| |
| function f() { |
| var bag = []; |
| for (var i = 0; i != 100; ++i) { |
| var a = [0]; |
| a[100*100] = i; |
| bag.push(a); |
| } |
| |
| for (var i = 0; i != 100; ++i) { |
| var a = [0]; |
| a[200 + i] = i; |
| bag.push(a); |
| } |
| return bag; |
| } |
| |
| var bag = f(); |
| |
| for (var i = 0; i != 100; ++i) { |
| var a = bag[i]; |
| assertEq(a.length, 100 * 100 + 1); |
| assertEq(a[100*100], i); |
| assertEq(a[0], 0); |
| assertEq(1 + i in a, false); |
| } |
| |
| for (var i = 0; i != 100; ++i) { |
| var a = bag[100 + i]; |
| assertEq(a.length, 200 + i + 1); |
| assertEq(a[200 + i], i); |
| assertEq(a[0], 0); |
| assertEq(1 + i in a, false); |
| } |
| } |
| |
| function test_reverse() { |
| |
| function prepare_arays() { |
| var bag = []; |
| var base_index = 245; |
| for (var i = 0; i != 50; ++i) { |
| var a = [1, 2, 3, 4, 5]; |
| a.length = i + base_index; |
| bag.push(a); |
| } |
| return bag; |
| } |
| |
| function test(bag) { |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| a.reverse(); |
| a[0] = 1; |
| } |
| } |
| |
| var bag = prepare_arays(); |
| test(bag); |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| assertEq(a[0], 1); |
| for (var j = 1; j <= 5; ++j) { |
| assertEq(a[a.length - j], j); |
| } |
| for (var j = 1; j < a.length - 5; ++j) { |
| assertEq(j in a, false); |
| } |
| } |
| |
| } |
| |
| function test_push() { |
| |
| function prepare_arays() { |
| var bag = []; |
| var base_index = 245; |
| for (var i = 0; i != 50; ++i) { |
| var a = [0]; |
| a.length = i + base_index; |
| bag.push(a); |
| } |
| return bag; |
| } |
| |
| function test(bag) { |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| a.push(2); |
| a[0] = 1; |
| } |
| } |
| |
| var bag = prepare_arays(); |
| test(bag); |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| assertEq(a[0], 1); |
| assertEq(a[a.length - 1], 2); |
| for (var j = 1; j < a.length - 1; ++j) { |
| assertEq(j in a, false); |
| } |
| } |
| } |
| |
| function test_unshift() { |
| |
| function prepare_arays() { |
| var bag = []; |
| var base_index = 245; |
| for (var i = 0; i != 50; ++i) { |
| var a = [0]; |
| a.length = i + base_index; |
| bag.push(a); |
| } |
| return bag; |
| } |
| |
| function test(bag) { |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| a.unshift(1); |
| a[2] = 2; |
| } |
| } |
| |
| var bag = prepare_arays(); |
| test(bag); |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| assertEq(a[0], 1); |
| assertEq(a[1], 0); |
| assertEq(a[2], 2); |
| for (var j = 3; j < a.length; ++j) { |
| assertEq(j in a, false); |
| } |
| } |
| } |
| |
| function test_splice() { |
| |
| function prepare_arays() { |
| var bag = []; |
| var base_index = 245; |
| for (var i = 0; i != 50; ++i) { |
| var a = [1, 2]; |
| a.length = i + base_index; |
| bag.push(a); |
| } |
| return bag; |
| } |
| |
| function test(bag) { |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| a.splice(1, 0, "a", "b", "c"); |
| a[2] = 100; |
| } |
| } |
| |
| var bag = prepare_arays(); |
| test(bag); |
| for (var i = 0; i != bag.length; ++i) { |
| var a = bag[i]; |
| assertEq(a[0], 1); |
| assertEq(a[1], "a"); |
| assertEq(a[2], 100); |
| assertEq(a[3], "c"); |
| assertEq(a[4], 2); |
| for (var j = 5; j < a.length; ++j) { |
| assertEq(j in a, false); |
| } |
| } |
| } |
| |
| test_set_elem(); |
| test_reverse(); |
| test_push(); |
| test_unshift(); |
| test_splice(); |
| |