LibJS: Add Math.min()

This commit is contained in:
Andreas Kling 2020-04-05 18:55:46 +02:00
parent 9e7dcaa106
commit 003741db1c
Notes: sideshowbarker 2024-07-19 07:52:45 +09:00
3 changed files with 30 additions and 0 deletions

View file

@ -41,6 +41,7 @@ MathObject::MathObject()
put_native_function("ceil", ceil, 1); put_native_function("ceil", ceil, 1);
put_native_function("round", round, 1); put_native_function("round", round, 1);
put_native_function("max", max, 2); put_native_function("max", max, 2);
put_native_function("min", min, 2);
put_native_function("trunc", trunc, 1); put_native_function("trunc", trunc, 1);
put("E", Value(M_E)); put("E", Value(M_E));
@ -139,6 +140,22 @@ Value MathObject::max(Interpreter& interpreter)
} }
} }
Value MathObject::min(Interpreter& interpreter)
{
if (!interpreter.argument_count())
return js_infinity();
if (interpreter.argument_count() == 1)
return interpreter.argument(0).to_number();
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;
}
Value MathObject::trunc(Interpreter& interpreter) Value MathObject::trunc(Interpreter& interpreter)
{ {
if (!interpreter.argument_count()) if (!interpreter.argument_count())

View file

@ -45,6 +45,7 @@ private:
static Value ceil(Interpreter&); static Value ceil(Interpreter&);
static Value round(Interpreter&); static Value round(Interpreter&);
static Value max(Interpreter&); static Value max(Interpreter&);
static Value min(Interpreter&);
static Value trunc(Interpreter&); static Value trunc(Interpreter&);
}; };

12
Libraries/LibJS/Tests/Math.min.js vendored Normal file
View file

@ -0,0 +1,12 @@
try {
assert(Math.min.length === 2);
assert(Math.min(1) === 1);
assert(Math.min(2, 1) === 1);
assert(Math.min(1, 2, 3) === 1);
assert(isNaN(Math.max(NaN)));
assert(isNaN(Math.max("String", 1)));
console.log("PASS");
} catch {
console.log("FAIL");
}