// 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);
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.