| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| */ |
| |
| /* |
| * ECMA-262 6th Edition / Draft November 8, 2013 |
| * |
| * 20.2.2 Function Properties of the Math Object |
| */ |
| |
| /* |
| * This custom object will allow us to check if valueOf() is called |
| */ |
| |
| TestNumber.prototype = new Number(); |
| |
| function TestNumber(value) { |
| this.value = value; |
| this.valueOfCalled = false; |
| } |
| |
| TestNumber.prototype = { |
| valueOf: function() { |
| this.valueOfCalled = true; |
| return this.value; |
| } |
| } |
| |
| // Verify that each TestNumber's flag is set after calling Math func |
| function test(func /*, args */) { |
| var args = Array.prototype.slice.call(arguments, 1); |
| func.apply(null, args); |
| |
| for (var i = 0; i < args.length; ++i) |
| assertEq(args[i].valueOfCalled, true); |
| } |
| |
| // Note that we are not testing these functions' return values |
| // We only test whether valueOf() is called for each argument |
| |
| // 1. Test Math.atan2() |
| var x = new TestNumber(1); |
| test(Math.atan2, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.atan2, y, x); |
| |
| // Remove comment block once patch for bug 896264 is approved |
| /* |
| // 2. Test Math.hypot() |
| var x = new TestNumber(1); |
| test(Math.hypot, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.hypot, x, y); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| var z = new TestNumber(3); |
| test(Math.hypot, x, y, z); |
| */ |
| |
| // Remove comment block once patch for bug 808148 is approved |
| /* |
| // 3. Test Math.imul() |
| var x = new TestNumber(1); |
| test(Math.imul, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.imul, x, y); |
| */ |
| |
| // 4. Test Math.max() |
| var x = new TestNumber(1); |
| test(Math.max, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.max, x, y); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| var z = new TestNumber(3); |
| test(Math.max, x, y, z); |
| |
| // 5. Test Math.min() |
| var x = new TestNumber(1); |
| test(Math.min, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.min, x, y); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| var z = new TestNumber(3); |
| test(Math.min, x, y, z); |
| |
| // 6. Test Math.pow() |
| var x = new TestNumber(1); |
| test(Math.pow, x); |
| |
| var x = new TestNumber(1); |
| var y = new TestNumber(2); |
| test(Math.pow, x, y); |
| |
| reportCompare(0, 0, "ok"); |
| |