Module: wine Branch: master Commit: c395981b2fef13008a4aa807869b7d657f38abd3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c395981b2fef13008a4aa80786...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Sep 21 15:45:25 2008 +0200
jscript: Added Math.round implementation.
---
dlls/jscript/math.c | 20 ++++++++++++++++++-- dlls/jscript/tests/api.js | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/math.c b/dlls/jscript/math.c index a2aa6a9..2bcf5ad 100644 --- a/dlls/jscript/math.c +++ b/dlls/jscript/math.c @@ -236,11 +236,27 @@ static HRESULT Math_random(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS return E_NOTIMPL; }
+/* ECMA-262 3rd Edition 15.8.2.15 */ static HRESULT Math_round(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + VARIANT v; + HRESULT hres; + + TRACE("\n"); + + if(!arg_cnt(dp)) { + FIXME("arg_cnt = 0\n"); + return E_NOTIMPL; + } + + hres = to_number(dispex->ctx, get_arg(dp, 0), ei, &v); + if(FAILED(hres)) + return hres; + + if(retv) + num_set_val(retv, floor(num_val(&v)+0.5)); + return S_OK; }
static HRESULT Math_sin(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 93f131d..34a6456 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -255,4 +255,19 @@ ok(tmp === 0, "Math.min(1, false) = " + tmp); tmp = Math.min(1, false, true, null, -3); ok(tmp === -3, "Math.min(1, false, true, null, -3) = " + tmp);
+tmp = Math.round(0.5); +ok(tmp === 1, "Math.round(0.5) = " + tmp); + +tmp = Math.round(-0.5); +ok(tmp === 0, "Math.round(-0.5) = " + tmp); + +tmp = Math.round(1.1); +ok(tmp === 1, "Math.round(1.1) = " + tmp); + +tmp = Math.round(true); +ok(tmp === 1, "Math.round(true) = " + tmp); + +tmp = Math.round(1.1, 3, 4); +ok(tmp === 1, "Math.round(1.1, 3, 4) = " + tmp); + reportSuccess();