From 97366f4dd435c7906ab363d695d85fd7bb56aa96 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 23 Apr 2020 12:36:08 +0100 Subject: [PATCH] LibJS: Add Math.pow() --- Libraries/LibJS/Runtime/MathObject.cpp | 6 ++++++ Libraries/LibJS/Runtime/MathObject.h | 1 + Libraries/LibJS/Tests/Math.pow.js | 29 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 Libraries/LibJS/Tests/Math.pow.js diff --git a/Libraries/LibJS/Runtime/MathObject.cpp b/Libraries/LibJS/Runtime/MathObject.cpp index a714123a3b..21287bd17d 100644 --- a/Libraries/LibJS/Runtime/MathObject.cpp +++ b/Libraries/LibJS/Runtime/MathObject.cpp @@ -48,6 +48,7 @@ MathObject::MathObject() put_native_function("sin", sin, 1); put_native_function("cos", cos, 1); put_native_function("tan", tan, 1); + put_native_function("pow", pow, 2); put("E", Value(M_E)); put("LN2", Value(M_LN2)); @@ -180,4 +181,9 @@ Value MathObject::tan(Interpreter& interpreter) return Value(::tan(number.as_double())); } +Value MathObject::pow(Interpreter& interpreter) +{ + return exp(interpreter, interpreter.argument(0), interpreter.argument(1)); +} + } diff --git a/Libraries/LibJS/Runtime/MathObject.h b/Libraries/LibJS/Runtime/MathObject.h index 9a80d6689c..75901cbee4 100644 --- a/Libraries/LibJS/Runtime/MathObject.h +++ b/Libraries/LibJS/Runtime/MathObject.h @@ -50,6 +50,7 @@ private: static Value sin(Interpreter&); static Value cos(Interpreter&); static Value tan(Interpreter&); + static Value pow(Interpreter&); }; } diff --git a/Libraries/LibJS/Tests/Math.pow.js b/Libraries/LibJS/Tests/Math.pow.js new file mode 100644 index 0000000000..b4e7670a1c --- /dev/null +++ b/Libraries/LibJS/Tests/Math.pow.js @@ -0,0 +1,29 @@ +load("test-common.js"); + +try { + assert(Math.pow(2, 0) === 1); + assert(Math.pow(2, 1) === 2); + assert(Math.pow(2, 2) === 4); + assert(Math.pow(2, 3) === 8); + assert(Math.pow(2, -3) === 0.125); + assert(Math.pow(3, 2) === 9); + assert(Math.pow(0, 0) === 1); + assert(Math.pow(2, Math.pow(3, 2)) === 512); + assert(Math.pow(Math.pow(2, 3), 2) === 64); + assert(Math.pow("2", "3") === 8); + assert(Math.pow("", []) === 1); + assert(Math.pow([], null) === 1); + assert(Math.pow(null, null) === 1); + assert(Math.pow(undefined, null) === 1); + assert(isNaN(Math.pow(NaN, 2))); + assert(isNaN(Math.pow(2, NaN))); + assert(isNaN(Math.pow(undefined, 2))); + assert(isNaN(Math.pow(2, undefined))); + assert(isNaN(Math.pow(null, undefined))); + assert(isNaN(Math.pow(2, "foo"))); + assert(isNaN(Math.pow("foo", 2))); + + console.log("PASS"); +} catch (e) { + console.log("FAIL: " + e); +}