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