function testInt32() { function f(arr, i) { arr[0] = 1; arr[1] = arr[0] + 1; arr[2] = arr[1] + arr[0]; var x = arr[2]; // 3 arr[x] = arr[x-1] + 1; arr[x+1] = arr[x] + i; return arr[4]; } var a = [1, 2, 3, 4, 5, 6, 7, 8]; for (var i=0; i<70; i++) { assertEq(f(a, i), i + 4); } } testInt32(); function testDouble() { function f(arr, d) { arr[0] = d; for (var i=1; i<8; i++) { arr[i] = arr[i-1] + d; } return arr[7]; } var a = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]; for (var i=0; i<50; i++) { assertEq(f(a, Math.PI + i)|0, ((Math.PI + i) * 8)|0); } } testDouble(); function testOutOfBounds() { function f(arr, i, v) { arr[i] = v; } var a = [1, 2]; for (var i=0; i<90; i++) { f(a, 1, i); } assertEq(a[1], 89); f(a, 2, 40); f(a, 100, 50); f(a, -1, 3); assertEq(a[2], 40); assertEq(a[100], 50); assertEq(a[-1], 3); } testOutOfBounds(); function testClassGuard() { function f(arr, v) { arr[1] = v; } var a = [1, 2, 3, 4]; for (var i=0; i<90; i++) { f(a, i); } assertEq(a[1], 89); var b = {}; f(b, 100); assertEq(b[1], 100); } testClassGuard(); function testMultipleTypes() { function f(arr, v) { arr[1] = v; } var a = [1, 2, 3, 4]; var b = [1.1, -233.2, 3.3]; for (var i=0; i<90; i++) { f(a, i); } assertEq(a[1], 89); f(b, 20); assertEq(b[1], 20); } testMultipleTypes(); function testNull() { function f(arr) { arr[0] = null; } var arr = [undefined]; for (var i=0; i<100; i++) { f(arr); } assertEq(arr[0], null); } testNull(); // Bug 722245. function testConstantGcThing() { function f(arr, x) { arr[x] = "abc"; } var arr = ["", ""]; for (var i=0; i<100; i++) { f(arr, 1); } assertEq(arr[1], "abc"); } testConstantGcThing();