1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 13:17:36 +00:00

LibJS: Add support for arbitrary arguments to Math.max

Address the FIXME in MathObject::max to handle an arbitrary
number of arguments. Also adding a test case to verify the
behavior of Math.max() while I'm here.
This commit is contained in:
Brian Gianforcaro 2020-04-04 23:25:23 -07:00 committed by Andreas Kling
parent 79539378c6
commit 4e54d0ff21
2 changed files with 22 additions and 13 deletions

View file

@ -115,21 +115,16 @@ Value MathObject::max(Interpreter& interpreter)
if (!interpreter.argument_count()) { if (!interpreter.argument_count()) {
// FIXME: I think this should return *negative* infinity. // FIXME: I think this should return *negative* infinity.
return js_infinity(); return js_infinity();
} } else if (interpreter.argument_count() == 1) {
if (interpreter.argument_count() == 1)
return interpreter.argument(0).to_number(); return interpreter.argument(0).to_number();
} else {
if (interpreter.argument_count() == 2) { Value max = interpreter.argument(0).to_number();
auto a = interpreter.argument(0).to_number(); for (size_t i = 1; i < interpreter.argument_count(); ++i) {
auto b = interpreter.argument(1).to_number(); Value cur = interpreter.argument(i).to_number();
return Value(a.as_double() > b.as_double() ? a : b); max = Value(cur.as_double() > max.as_double() ? cur : max);
}
return max;
}
} }
// FIXME: Support Math.max() with more arguments.
ASSERT_NOT_REACHED();
return {};
}
} }

View file

@ -0,0 +1,14 @@
function assert(x) { if (!x) throw 1; }
try {
assert(Math.max.length === 2);
assert(Math.max(1) === 1);
assert(Math.max(2, 1) === 2);
assert(Math.max(1, 2, 3) === 3);
assert(isNaN(Math.max(NaN)));
assert(isNaN(Math.max("String", 1)));
console.log("PASS");
} catch {
console.log("FAIL");
}