From d4dfe7e5253229ccbdfb3a4fcc7911bbde49342f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 4 Apr 2020 22:44:48 +0200 Subject: [PATCH] LibJS: Add Math.sqrt() --- Libraries/LibJS/Runtime/MathObject.cpp | 18 +++++++++++++++--- Libraries/LibJS/Runtime/MathObject.h | 1 + Libraries/LibJS/Tests/Math.sqrt.js | 7 +++++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 Libraries/LibJS/Tests/Math.sqrt.js diff --git a/Libraries/LibJS/Runtime/MathObject.cpp b/Libraries/LibJS/Runtime/MathObject.cpp index c35d254177..b1755144af 100644 --- a/Libraries/LibJS/Runtime/MathObject.cpp +++ b/Libraries/LibJS/Runtime/MathObject.cpp @@ -28,7 +28,7 @@ #include #include #include -#include +#include namespace JS { @@ -36,6 +36,7 @@ MathObject::MathObject() { put_native_function("abs", abs, 1); put_native_function("random", random); + put_native_function("sqrt", sqrt); put("E", Value(M_E)); put("LN2", Value(M_LN2)); @@ -43,8 +44,8 @@ MathObject::MathObject() put("LOG2E", Value(log2(M_E))); put("LOG10E", Value(log10(M_E))); put("PI", Value(M_PI)); - put("SQRT1_2", Value(sqrt(1 / 2))); - put("SQRT2", Value(sqrt(2))); + put("SQRT1_2", Value(::sqrt(1 / 2))); + put("SQRT2", Value(::sqrt(2))); } MathObject::~MathObject() @@ -72,4 +73,15 @@ Value MathObject::random(Interpreter&) return Value(r); } +Value MathObject::sqrt(Interpreter& interpreter) +{ + if (!interpreter.argument_count()) + return js_nan(); + + auto number = interpreter.argument(0).to_number(); + if (number.is_nan()) + return js_nan(); + return Value(::sqrt(number.as_double())); +} + } diff --git a/Libraries/LibJS/Runtime/MathObject.h b/Libraries/LibJS/Runtime/MathObject.h index 1953eeb3a2..21f6130e75 100644 --- a/Libraries/LibJS/Runtime/MathObject.h +++ b/Libraries/LibJS/Runtime/MathObject.h @@ -40,6 +40,7 @@ private: static Value abs(Interpreter&); static Value random(Interpreter&); + static Value sqrt(Interpreter&); }; } diff --git a/Libraries/LibJS/Tests/Math.sqrt.js b/Libraries/LibJS/Tests/Math.sqrt.js new file mode 100644 index 0000000000..c8574d71cf --- /dev/null +++ b/Libraries/LibJS/Tests/Math.sqrt.js @@ -0,0 +1,7 @@ +function assert(x) { if (!x) throw 1; } + +try { + assert(Math.sqrt(9) === 3); + console.log("PASS"); +} catch { +}