mathSign.js (1795B)
1 // Test Math.sign() for IonMonkey. 2 // Requires --ion-eager to enter at the top of each loop. 3 4 var signDITests = [ 5 [0.49999999999999997, 1], 6 [0.5, 1], 7 [1.0, 1], 8 [1.5, 1], 9 [792.8, 1], 10 [-0.1, -1], 11 [-1.0001, -1], 12 [-3.14, -1], 13 [900000000000, 1], 14 [+0, +0], 15 [-Infinity, -1], 16 [Infinity, 1], 17 ]; 18 19 var signDITests_bailout = [ 20 // Add a few 'double -> int' tests before the bailout. 21 ...(function*(){ for (var i = 0; i < 50; ++i) yield* signDITests; })(), 22 23 // Trigger bailout for negative zero. 24 [-0, -0], 25 ]; 26 27 var signDTests = [ 28 [-0, -0], 29 [0.49999999999999997, 1], 30 [0.5, 1], 31 [1.0, 1], 32 [1.5, 1], 33 [792.8, 1], 34 [-0.1, -1], 35 [-1.0001, -1], 36 [-3.14, -1], 37 [900000000000, 1], 38 [-0, -0], 39 [+0, +0], 40 [-Infinity, -1], 41 [Infinity, 1], 42 [NaN, NaN], 43 ]; 44 45 var signITests = [ 46 [0, 0], 47 [4, 1], 48 [-1, -1], 49 [-7, -1], 50 [2147483647, 1], 51 [-2147483648, -1], 52 ]; 53 54 // Typed functions to be compiled by Ion. 55 function signDI(x) { return Math.sign(x); } 56 function signDI_bailout(x) { return Math.sign(x); } 57 function signD(x) { return Math.sign(x); } 58 function signI(x) { return Math.sign(x); } 59 60 function test() { 61 // Always run this function in the interpreter. 62 with ({}) {} 63 64 for (var i = 0; i < signDITests.length; i++) 65 assertEq(signDI(signDITests[i][0]), signDITests[i][1]); 66 for (var i = 0; i < signDITests_bailout.length; i++) 67 assertEq(signDI_bailout(signDITests_bailout[i][0]), signDITests_bailout[i][1]); 68 for (var i = 0; i < signDTests.length; i++) 69 assertEq(signD(signDTests[i][0]), signDTests[i][1]); 70 for (var i = 0; i < signITests.length; i++) 71 assertEq(signI(signITests[i][0]), signITests[i][1]); 72 } 73 74 for (var i = 0; i < 40; i++) 75 test();