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