function testMathMaxMin(aFun) { var test_error = { name: "test" }; test(function() { assert_throws(test_error, function() { Math[aFun](NaN, { valueOf: function() { throw test_error; } }); }); }, "ToNumber should be called on all arguments: NaN."); test(function() { assert_throws(test_error, function() { Math[aFun](-Infinity, { valueOf: function() { throw test_error; } }); }); }, "ToNumber should be called on all arguments: -Infinity."); test(function() { assert_throws(test_error, function() { Math[aFun](Infinity, { valueOf: function() { throw test_error; } }); }); }, "ToNumber should be called on all arguments: Infinity."); test(function() { assert_throws(test_error, function() { Math[aFun]({ valueOf: function() { throw test_error; } }, { valueOf: function() { throw 7; } }); }); }, "ToNumber should be called left to right."); test(function() { assert_equals(Math[aFun]("1"), 1); }, "Should return a number."); test(function() { var expected = { "max": 0, "min": -0 } assert_equals(Math[aFun](0, -0), expected[aFun]); assert_equals(Math[aFun](-0, 0), expected[aFun]); assert_equals(Math[aFun](0, 0), 0); assert_equals(Math[aFun](-0, -0), -0); }, "Should handle negative zero correctly."); }