setelem.js (2036B)
1 function testInt32() { 2 function f(arr, i) { 3 arr[0] = 1; 4 arr[1] = arr[0] + 1; 5 arr[2] = arr[1] + arr[0]; 6 var x = arr[2]; // 3 7 arr[x] = arr[x-1] + 1; 8 arr[x+1] = arr[x] + i; 9 return arr[4]; 10 } 11 var a = [1, 2, 3, 4, 5, 6, 7, 8]; 12 for (var i=0; i<70; i++) { 13 assertEq(f(a, i), i + 4); 14 } 15 } 16 testInt32(); 17 18 function testDouble() { 19 function f(arr, d) { 20 arr[0] = d; 21 for (var i=1; i<8; i++) { 22 arr[i] = arr[i-1] + d; 23 } 24 return arr[7]; 25 } 26 var a = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]; 27 for (var i=0; i<50; i++) { 28 assertEq(f(a, Math.PI + i)|0, ((Math.PI + i) * 8)|0); 29 } 30 } 31 testDouble(); 32 33 function testOutOfBounds() { 34 function f(arr, i, v) { 35 arr[i] = v; 36 } 37 var a = [1, 2]; 38 for (var i=0; i<90; i++) { 39 f(a, 1, i); 40 } 41 assertEq(a[1], 89); 42 43 f(a, 2, 40); 44 f(a, 100, 50); 45 f(a, -1, 3); 46 47 assertEq(a[2], 40); 48 assertEq(a[100], 50); 49 assertEq(a[-1], 3); 50 } 51 testOutOfBounds(); 52 53 function testClassGuard() { 54 function f(arr, v) { 55 arr[1] = v; 56 } 57 var a = [1, 2, 3, 4]; 58 for (var i=0; i<90; i++) { 59 f(a, i); 60 } 61 assertEq(a[1], 89); 62 63 var b = {}; 64 f(b, 100); 65 assertEq(b[1], 100); 66 } 67 testClassGuard(); 68 69 function testMultipleTypes() { 70 function f(arr, v) { 71 arr[1] = v; 72 } 73 var a = [1, 2, 3, 4]; 74 var b = [1.1, -233.2, 3.3]; 75 76 for (var i=0; i<90; i++) { 77 f(a, i); 78 } 79 assertEq(a[1], 89); 80 f(b, 20); 81 assertEq(b[1], 20); 82 } 83 testMultipleTypes(); 84 85 function testNull() { 86 function f(arr) { 87 arr[0] = null; 88 } 89 90 var arr = [undefined]; 91 for (var i=0; i<100; i++) { 92 f(arr); 93 } 94 assertEq(arr[0], null); 95 } 96 testNull(); 97 98 // Bug 722245. 99 function testConstantGcThing() { 100 function f(arr, x) { 101 arr[x] = "abc"; 102 } 103 var arr = ["", ""]; 104 for (var i=0; i<100; i++) { 105 f(arr, 1); 106 } 107 assertEq(arr[1], "abc"); 108 } 109 testConstantGcThing();