blob: e4b6b5d2dde41b563bb498b47be502ef97196e6b [file] [log] [blame]
// 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();