js/src/jit-test/tests/basic/testDenseToSlowArray.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 // test dense -> slow array transitions during the recording and on trace
michael@0 2 // for various array functions and property accessors
michael@0 3
michael@0 4 function test_set_elem() {
michael@0 5
michael@0 6 function f() {
michael@0 7 var bag = [];
michael@0 8 for (var i = 0; i != 100; ++i) {
michael@0 9 var a = [0];
michael@0 10 a[100*100] = i;
michael@0 11 bag.push(a);
michael@0 12 }
michael@0 13
michael@0 14 for (var i = 0; i != 100; ++i) {
michael@0 15 var a = [0];
michael@0 16 a[200 + i] = i;
michael@0 17 bag.push(a);
michael@0 18 }
michael@0 19 return bag;
michael@0 20 }
michael@0 21
michael@0 22 var bag = f();
michael@0 23
michael@0 24 for (var i = 0; i != 100; ++i) {
michael@0 25 var a = bag[i];
michael@0 26 assertEq(a.length, 100 * 100 + 1);
michael@0 27 assertEq(a[100*100], i);
michael@0 28 assertEq(a[0], 0);
michael@0 29 assertEq(1 + i in a, false);
michael@0 30 }
michael@0 31
michael@0 32 for (var i = 0; i != 100; ++i) {
michael@0 33 var a = bag[100 + i];
michael@0 34 assertEq(a.length, 200 + i + 1);
michael@0 35 assertEq(a[200 + i], i);
michael@0 36 assertEq(a[0], 0);
michael@0 37 assertEq(1 + i in a, false);
michael@0 38 }
michael@0 39 }
michael@0 40
michael@0 41 function test_reverse() {
michael@0 42
michael@0 43 function prepare_arays() {
michael@0 44 var bag = [];
michael@0 45 var base_index = 245;
michael@0 46 for (var i = 0; i != 50; ++i) {
michael@0 47 var a = [1, 2, 3, 4, 5];
michael@0 48 a.length = i + base_index;
michael@0 49 bag.push(a);
michael@0 50 }
michael@0 51 return bag;
michael@0 52 }
michael@0 53
michael@0 54 function test(bag) {
michael@0 55 for (var i = 0; i != bag.length; ++i) {
michael@0 56 var a = bag[i];
michael@0 57 a.reverse();
michael@0 58 a[0] = 1;
michael@0 59 }
michael@0 60 }
michael@0 61
michael@0 62 var bag = prepare_arays();
michael@0 63 test(bag);
michael@0 64 for (var i = 0; i != bag.length; ++i) {
michael@0 65 var a = bag[i];
michael@0 66 assertEq(a[0], 1);
michael@0 67 for (var j = 1; j <= 5; ++j) {
michael@0 68 assertEq(a[a.length - j], j);
michael@0 69 }
michael@0 70 for (var j = 1; j < a.length - 5; ++j) {
michael@0 71 assertEq(j in a, false);
michael@0 72 }
michael@0 73 }
michael@0 74
michael@0 75 }
michael@0 76
michael@0 77 function test_push() {
michael@0 78
michael@0 79 function prepare_arays() {
michael@0 80 var bag = [];
michael@0 81 var base_index = 245;
michael@0 82 for (var i = 0; i != 50; ++i) {
michael@0 83 var a = [0];
michael@0 84 a.length = i + base_index;
michael@0 85 bag.push(a);
michael@0 86 }
michael@0 87 return bag;
michael@0 88 }
michael@0 89
michael@0 90 function test(bag) {
michael@0 91 for (var i = 0; i != bag.length; ++i) {
michael@0 92 var a = bag[i];
michael@0 93 a.push(2);
michael@0 94 a[0] = 1;
michael@0 95 }
michael@0 96 }
michael@0 97
michael@0 98 var bag = prepare_arays();
michael@0 99 test(bag);
michael@0 100 for (var i = 0; i != bag.length; ++i) {
michael@0 101 var a = bag[i];
michael@0 102 assertEq(a[0], 1);
michael@0 103 assertEq(a[a.length - 1], 2);
michael@0 104 for (var j = 1; j < a.length - 1; ++j) {
michael@0 105 assertEq(j in a, false);
michael@0 106 }
michael@0 107 }
michael@0 108 }
michael@0 109
michael@0 110 function test_unshift() {
michael@0 111
michael@0 112 function prepare_arays() {
michael@0 113 var bag = [];
michael@0 114 var base_index = 245;
michael@0 115 for (var i = 0; i != 50; ++i) {
michael@0 116 var a = [0];
michael@0 117 a.length = i + base_index;
michael@0 118 bag.push(a);
michael@0 119 }
michael@0 120 return bag;
michael@0 121 }
michael@0 122
michael@0 123 function test(bag) {
michael@0 124 for (var i = 0; i != bag.length; ++i) {
michael@0 125 var a = bag[i];
michael@0 126 a.unshift(1);
michael@0 127 a[2] = 2;
michael@0 128 }
michael@0 129 }
michael@0 130
michael@0 131 var bag = prepare_arays();
michael@0 132 test(bag);
michael@0 133 for (var i = 0; i != bag.length; ++i) {
michael@0 134 var a = bag[i];
michael@0 135 assertEq(a[0], 1);
michael@0 136 assertEq(a[1], 0);
michael@0 137 assertEq(a[2], 2);
michael@0 138 for (var j = 3; j < a.length; ++j) {
michael@0 139 assertEq(j in a, false);
michael@0 140 }
michael@0 141 }
michael@0 142 }
michael@0 143
michael@0 144 function test_splice() {
michael@0 145
michael@0 146 function prepare_arays() {
michael@0 147 var bag = [];
michael@0 148 var base_index = 245;
michael@0 149 for (var i = 0; i != 50; ++i) {
michael@0 150 var a = [1, 2];
michael@0 151 a.length = i + base_index;
michael@0 152 bag.push(a);
michael@0 153 }
michael@0 154 return bag;
michael@0 155 }
michael@0 156
michael@0 157 function test(bag) {
michael@0 158 for (var i = 0; i != bag.length; ++i) {
michael@0 159 var a = bag[i];
michael@0 160 a.splice(1, 0, "a", "b", "c");
michael@0 161 a[2] = 100;
michael@0 162 }
michael@0 163 }
michael@0 164
michael@0 165 var bag = prepare_arays();
michael@0 166 test(bag);
michael@0 167 for (var i = 0; i != bag.length; ++i) {
michael@0 168 var a = bag[i];
michael@0 169 assertEq(a[0], 1);
michael@0 170 assertEq(a[1], "a");
michael@0 171 assertEq(a[2], 100);
michael@0 172 assertEq(a[3], "c");
michael@0 173 assertEq(a[4], 2);
michael@0 174 for (var j = 5; j < a.length; ++j) {
michael@0 175 assertEq(j in a, false);
michael@0 176 }
michael@0 177 }
michael@0 178 }
michael@0 179
michael@0 180 test_set_elem();
michael@0 181 test_reverse();
michael@0 182 test_push();
michael@0 183 test_unshift();
michael@0 184 test_splice();
michael@0 185

mercurial