1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/getelem.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,77 @@ 1.4 +function testValue() { 1.5 + function f(arr, x) { 1.6 + return arr[x]; 1.7 + } 1.8 + var a = [1, undefined, null, Math, 2.1, ""]; 1.9 + for (var i=0; i<50; i++) { 1.10 + assertEq(f(a, 0), 1); 1.11 + assertEq(f(a, 1), undefined); 1.12 + assertEq(f(a, 2), null); 1.13 + assertEq(f(a, 3), Math); 1.14 + assertEq(f(a, 4), 2.1); 1.15 + assertEq(f(a, 5), ""); 1.16 + assertEq(f(a, -1), undefined); 1.17 + assertEq(f(a, 6), undefined); 1.18 + } 1.19 +} 1.20 +testValue(); 1.21 + 1.22 +function testOutOfBounds() { 1.23 + function f(arr, x) { 1.24 + return arr[x]; 1.25 + } 1.26 + var a = [0, 1, 2, 3, 4]; 1.27 + 1.28 + for (var j=0; j<4; j++) { 1.29 + for (var i=0; i<5; i++) { 1.30 + assertEq(f(a, i), i); 1.31 + } 1.32 + for (var i=5; i<10; i++) { 1.33 + assertEq(f(a, i), undefined); 1.34 + } 1.35 + for (var i=-1; i>-10; i--) { 1.36 + assertEq(f(a, i), undefined); 1.37 + } 1.38 + } 1.39 +} 1.40 +testOutOfBounds(); 1.41 + 1.42 +function testHole() { 1.43 + function f(arr, x) { 1.44 + return arr[x]; 1.45 + } 1.46 + var a = [0, , 2, ]; 1.47 + for (var i=0; i<70; i++) { 1.48 + assertEq(f(a, 0), 0); 1.49 + assertEq(f(a, 1), undefined); 1.50 + assertEq(f(a, 2), 2); 1.51 + assertEq(f(a, 3), undefined); 1.52 + } 1.53 +} 1.54 +testHole(); 1.55 + 1.56 +function testClassGuard() { 1.57 + function f(arr) { 1.58 + return arr[2]; 1.59 + } 1.60 + var a = [1, 2, 3, 4]; 1.61 + for (var i=0; i<90; i++) { 1.62 + assertEq(f(a), 3); 1.63 + } 1.64 + var b = {2: 100}; 1.65 + assertEq(f(b), 100); 1.66 +} 1.67 +testClassGuard(); 1.68 + 1.69 +function testGeneric1() { 1.70 + function f(o, i) { 1.71 + return o[i]; 1.72 + } 1.73 + for (var i=0; i<100; i++) { 1.74 + assertEq(f("abc", 1), "b"); 1.75 + assertEq(f("foo", "length"), 3); 1.76 + assertEq(f([], -1), undefined); 1.77 + assertEq(f({x: 1}, "x"), 1); 1.78 + } 1.79 +} 1.80 +testGeneric1();