diff options
author | Linus Groh <mail@linusgroh.de> | 2020-04-23 12:36:08 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-04-23 19:38:13 +0200 |
commit | 97366f4dd435c7906ab363d695d85fd7bb56aa96 (patch) | |
tree | 83842ca883473a4c1d512fcad3545376cb08e6fb | |
parent | 687096cadd0bf77da0d1dad6a3e0d8c5dbbf1812 (diff) | |
download | serenity-97366f4dd435c7906ab363d695d85fd7bb56aa96.zip |
LibJS: Add Math.pow()
-rw-r--r-- | Libraries/LibJS/Runtime/MathObject.cpp | 6 | ||||
-rw-r--r-- | Libraries/LibJS/Runtime/MathObject.h | 1 | ||||
-rw-r--r-- | Libraries/LibJS/Tests/Math.pow.js | 29 |
3 files changed, 36 insertions, 0 deletions
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); +} |