mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 04:25:13 +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:
parent
79539378c6
commit
4e54d0ff21
Notes:
sideshowbarker
2024-07-19 07:55:01 +09:00
Author: https://github.com/bgianfo Commit: https://github.com/SerenityOS/serenity/commit/4e54d0ff211 Pull-request: https://github.com/SerenityOS/serenity/pull/1633
2 changed files with 22 additions and 13 deletions
|
@ -115,21 +115,16 @@ Value MathObject::max(Interpreter& interpreter)
|
|||
if (!interpreter.argument_count()) {
|
||||
// FIXME: I think this should return *negative* infinity.
|
||||
return js_infinity();
|
||||
}
|
||||
|
||||
if (interpreter.argument_count() == 1)
|
||||
} else if (interpreter.argument_count() == 1) {
|
||||
return interpreter.argument(0).to_number();
|
||||
|
||||
if (interpreter.argument_count() == 2) {
|
||||
auto a = interpreter.argument(0).to_number();
|
||||
auto b = interpreter.argument(1).to_number();
|
||||
return Value(a.as_double() > b.as_double() ? a : b);
|
||||
} else {
|
||||
Value max = interpreter.argument(0).to_number();
|
||||
for (size_t i = 1; i < interpreter.argument_count(); ++i) {
|
||||
Value cur = interpreter.argument(i).to_number();
|
||||
max = Value(cur.as_double() > max.as_double() ? cur : max);
|
||||
}
|
||||
return max;
|
||||
}
|
||||
|
||||
// FIXME: Support Math.max() with more arguments.
|
||||
ASSERT_NOT_REACHED();
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
14
Libraries/LibJS/Tests/Math.max.js
Normal file
14
Libraries/LibJS/Tests/Math.max.js
Normal 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");
|
||||
}
|
Loading…
Add table
Reference in a new issue