1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/getelem-bounds-coalesce.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,49 @@ 1.4 +var a = [1,2,3,4]; 1.5 + 1.6 +// Basic constants. 1.7 +function foo(x) { 1.8 + return x[0] + x[1] + x[2] + x[3]; 1.9 +} 1.10 +for (var i = 0; i < 100; i++) 1.11 + assertEq(foo(a), 10); 1.12 +assertEq(foo([1,2,3]), NaN); 1.13 + 1.14 +// Basic terms. 1.15 +function foo2(x, n) { 1.16 + return x[n] + x[n + 1] + x[n + 2]; 1.17 +} 1.18 +for (var i = 0; i < 100; i++) 1.19 + assertEq(foo2(a, 1), 9); 1.20 +assertEq(foo2(a, 2), NaN); 1.21 + 1.22 +// Term underflow. 1.23 +function foo3(x, n) { 1.24 + return x[n] + x[n + 1] + x[n + 2]; 1.25 +} 1.26 +for (var i = 0; i < 100; i++) 1.27 + assertEq(foo3(a, 1), 9); 1.28 +assertEq(foo3(a, -1), NaN); 1.29 + 1.30 +// Integer overflow computing bound. 1.31 +function foo4(x, n) { 1.32 + return x[n] + x[n + 1] + x[n + 2]; 1.33 +} 1.34 +for (var i = 0; i < 45; i++) 1.35 + assertEq(foo4(a, 1), 9); 1.36 +assertEq(foo4(a, 0x7fffffff), NaN); 1.37 + 1.38 +// Underflow at an offset. 1.39 +function foo5(x, n) { 1.40 + return x[n + 10] + x[n + 11] + x[n + 12]; 1.41 +} 1.42 +for (var i = 0; i < 45; i++) 1.43 + assertEq(foo5(a, -9), 9); 1.44 +assertEq(foo5(a, -11), NaN); 1.45 + 1.46 +// Overflow at offset. 1.47 +function foo6(x, n) { 1.48 + return x[n - 10] + x[n - 11] + x[n - 12]; 1.49 +} 1.50 +for (var i = 0; i < 45; i++) 1.51 + assertEq(foo6(a, 13), 9); 1.52 +assertEq(foo6(a, 14), NaN);