Shuai Meng : vbscript: Implemented Sqr.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 19 16:00:08 CDT 2014


Module: wine
Branch: master
Commit: 85dfafa3e72f6b0763f2dede662d341f33a678f8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=85dfafa3e72f6b0763f2dede662d341f33a678f8

Author: Shuai Meng <mengshuaicalendr at gmail.com>
Date:   Mon Aug 18 23:10:25 2014 +0800

vbscript: Implemented Sqr.

---

 dlls/vbscript/global.c      | 13 +++++++++++--
 dlls/vbscript/tests/api.vbs | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index 98be6c1..183cdaf 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -699,8 +699,17 @@ static HRESULT Global_Log(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIA
 
 static HRESULT Global_Sqr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    HRESULT hres;
+    double d;
+
+    hres = to_double(arg, &d);
+    if(FAILED(hres))
+        return hres;
+
+    if(d < 0)
+        return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL);
+    else
+        return return_double(res, sqrt(d));
 }
 
 static HRESULT Global_Randomize(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 4f5800d..70268e7 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -1043,4 +1043,39 @@ MyObject.myval = -2.5
 Call ok(Int(MyObject) = -3, "Int(MyObject) = " & Int(MyObject))
 Call ok(getVT(Int(MyObject)) = "VT_R8", "getVT(Int(MyObject)) = " & getVT(Int(MyObject)))
 
+Sub testSqrError(strings, error_num1, error_num2)
+    on error resume next
+    Dim x
+
+    Call Err.clear()
+    x = Sqr(strings)
+    Call ok(Err.number = error_num1, "Err.number1 = " & Err.number)
+
+    Call Err.clear()
+    Call Sqr(strings)
+    Call ok(Err.number = error_num2, "Err.number2 = " & Err.number)
+End Sub
+
+Call testSqrError(-2, 5, 5)
+Call testSqrError(True, 5, 5)
+
+Call ok(Sqr(Empty) = 0, "Sqr(Empty) = " & Sqr(Empty))
+Call ok(getVT(Sqr(Empty)) = "VT_R8", "getVT(Sqr(Empty)) = " & getVT(Sqr(Empty)))
+Call ok(Sqr(0) = 0, "Sqr(0) = " & Sqr(0))
+Call ok(getVT(Sqr(0)) = "VT_R8", "getVT(Sqr(0)) = " & getVT(Sqr(0)))
+Call ok(Sqr(1) = 1, "Sqr(1) = " & Sqr(1))
+Call ok(getVT(Sqr(1)) = "VT_R8", "getVT(Sqr(1)) = " & getVT(Sqr(1)))
+Call ok(Sqr(CSng(121)) = 11, "Sqr(CSng(121)) = " & Sqr(CSng(121)))
+Call ok(getVT(Sqr(CSng(121))) = "VT_R8", "getVT(Sqr(CSng(121))) = " & getVT(Sqr(CSng(121))))
+Call ok(Sqr(36100) = 190, "Sqr(36100) = " & Sqr(36100))
+Call ok(getVT(Sqr(36100)) = "VT_R8", "getVT(Sqr(36100)) = " & getVT(Sqr(36100)))
+Call ok(Sqr(CCur(0.0625)) = 0.25, "Sqr(CCur(0.0625)) = " & Sqr(CCur(0.0625)))
+Call ok(getVT(Sqr(CCur(0.0625))) = "VT_R8", "getVT(Sqr(CCur(0.0625))) = " & getVT(Sqr(CCur(0.0625))))
+Call ok(Sqr("100000000") = 10000, "Sqr(""100000000"") = " & Sqr("100000000"))
+Call ok(getVT(Sqr("100000000")) = "VT_R8", "getVT(Sqr(""100000000"")) = " & getVT(Sqr("100000000")))
+Call ok(Sqr(False) = 0, "Sqr(False) = " & Sqr(False))
+Call ok(getVT(Sqr(False)) = "VT_R8", "getVT(Sqr(False)) = " & getVT(Sqr(False)))
+Call ok(Sqr(CByte(225)) = 15, "Sqr(CByte(225)) = " & Sqr(CByte(225)))
+Call ok(getVT(Sqr(CByte(225))) = "VT_R8", "getVT(Sqr(CByte(225))) = " & getVT(Sqr(CByte(225))))
+
 Call reportSuccess()




More information about the wine-cvs mailing list