1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/mathImul.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,71 @@ 1.4 + 1.5 +var table = [ 1.6 + [NaN, 0, 0], 1.7 + [Infinity, Infinity, 0], 1.8 + [NaN, 1000, 0], 1.9 + 1.10 + [-1, -2, 2], 1.11 + [1, 2, 2], 1.12 + [-1, 2, -2], 1.13 + [1, -2, -2], 1.14 + [-0, 0, 0], 1.15 + [0, -0, 0], 1.16 + [-1, -0, 0], 1.17 + [1, -0, 0], 1.18 + 1.19 + [0xffffffff, 1, -1], 1.20 + 1.21 + [0xffffffff, 0xffffffff, 1], 1.22 + [0xffffffff, -0xffffffff, -1], 1.23 + [0xffffffff, 0xfffffffe, 2], 1.24 + [0xffffffff, -0xfffffffe, -2], 1.25 + [0x10000, 0x10000, 0], 1.26 + 1.27 + [{}, {}, 0], 1.28 + [[], [], 0], 1.29 + [{}, [], 0], 1.30 + [[], {}, 0], 1.31 + 1.32 + [{valueOf: function() { return -1; }}, 0x100000, -1048576], 1.33 + ["3", "-4", -12], 1.34 + [3.4, 6, 18] 1.35 +]; 1.36 + 1.37 +try { 1.38 + Math.imul({ valueOf: function() { throw "ha ha ha"; } }); 1.39 + assertEq(true, false, "no error thrown"); 1.40 +} catch (e) { 1.41 + assertEq(e, "ha ha ha"); 1.42 +} 1.43 + 1.44 +var order = []; 1.45 +assertEq(Math.imul({ valueOf: function() { order.push("first"); return 0; } }, 1.46 + { valueOf: function() { order.push("second"); return 0; } }), 1.47 + 0); 1.48 +assertEq(order[0], "first"); 1.49 +assertEq(order[1], "second"); 1.50 + 1.51 +var seen = []; 1.52 +try 1.53 +{ 1.54 + Math.imul({ valueOf: function() { seen.push("one"); return 17; } }, 1.55 + { valueOf: function() { throw "abort!"; } }); 1.56 + assertEq(true, false, "no error thrown"); 1.57 +} 1.58 +catch (e) 1.59 +{ 1.60 + assertEq(e, "abort!", "should have thrown partway through, instead threw " + e); 1.61 +} 1.62 +assertEq(seen.length, 1); 1.63 +assertEq(seen[0], "one"); 1.64 + 1.65 +assertEq(Math.imul(), 0); 1.66 +assertEq(Math.imul(100), 0); 1.67 +assertEq(Math.imul(NaN, 100), 0); 1.68 +assertEq(Math.imul(NaN, NaN), 0); 1.69 +assertEq(Math.imul(5, Infinity), 0); 1.70 + 1.71 +for (var i = 0; i < table.length; i++) { 1.72 + assertEq(Math.imul(table[i][0], table[i][1]), table[i][2]); 1.73 + assertEq(Math.imul(table[i][1], table[i][0]), table[i][2]); 1.74 +}