* Bug #14057 fixed - grand(m,n) returned a wrong error and grand(m,n,p) called %s_gra... 81/17081/3
Adeline CARNIS [Fri, 21 Aug 2015 12:49:00 +0000 (14:49 +0200)]
Change-Id: Ic2bba07166184cb39cc9bcf0a4c63a4d8d9df2f4

scilab/CHANGES_6.0.X
scilab/modules/randlib/sci_gateway/cpp/sci_grand.cpp
scilab/modules/randlib/tests/nonreg_tests/bug_14057.dia.ref [new file with mode: 0644]
scilab/modules/randlib/tests/nonreg_tests/bug_14057.tst [new file with mode: 0644]

index 87910c3..52da336 100644 (file)
@@ -37,6 +37,8 @@ Scilab Bug Fixes
 
 * Bug #14049 fixed - genlib hangs if an unexpected endfunction occurs.
 
+* Bug #14057 fixed - grand(m,n) returned a wrong error and grand(m,n,p) called an overloading function instead of returning an error.
+
 * Bug #14058 fixed - Scilab crashed with 'file("close", file())' instruction
 
 * Bug #14095 fixed - Scilab crashed when a .fig file was loaded with loadmatfile function.
index 574a0b0..a999b0b 100644 (file)
@@ -76,23 +76,31 @@ types::Function::ReturnValue sci_grand(types::typed_list &in, int _iRetCount, ty
         return types::Function::Error;
     }
 
-    // *** find the mothod string. ***
+    // *** find the method string. ***
     for (int i = 0; i < in.size(); i++)
     {
         if (in[i]->isString())
         {
             pStrMethod = in[i]->getAs<types::String>();
             iStrPos = i;
-
             break;
         }
     }
 
-    if ((iStrPos == 0) && (in[0]->isString() == false))
+    if (pStrMethod == NULL)
     {
-        ast::ExecVisitor exec;
-        std::wstring wstFuncName = L"%" + in[0]->getShortTypeStr() + L"_grand";
-        return Overload::call(wstFuncName, in, _iRetCount, out, &exec);
+        for (int i = 0; i < in.size(); i++)
+        {
+            if (in[i]->isDouble() == false)
+            {
+                ast::ExecVisitor exec;
+                std::wstring wstFuncName = L"%" + in[0]->getShortTypeStr() + L"_grand";
+                return Overload::call(wstFuncName, in, _iRetCount, out, &exec);
+            }
+        }
+
+        Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), "grand", in.size() + 1);
+        return types::Function::Error;
     }
 
     int iDims = iStrPos > 1 ? iStrPos : 2;
@@ -102,12 +110,6 @@ types::Function::ReturnValue sci_grand(types::typed_list &in, int _iRetCount, ty
     itab[0] = 1;
     itab[1] = 1;
 
-    if (pStrMethod == NULL)
-    {
-        Scierror(78, _("%s: Wrong number of output argument(s): At least %d string expected.\n"), "grand", 1);
-        return types::Function::Error;
-    }
-
     wchar_t* wcsMeth = pStrMethod->get(0);
     int iNumInputArg = 5;
     if (wcscmp(wcsMeth, L"bet") == 0) // beta
diff --git a/scilab/modules/randlib/tests/nonreg_tests/bug_14057.dia.ref b/scilab/modules/randlib/tests/nonreg_tests/bug_14057.dia.ref
new file mode 100644 (file)
index 0000000..0cd7793
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14057 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14057
+//
+// <-- Short Description -->
+//    Calling grand(m,n) returned a wrong error and grand(m,n,p) called %s_grand
+//    function instead of an error.
+// =============================================================================
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"), "grand", 3);
+assert_checkerror("grand(2,3)", refMsg);
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"), "grand", 4);
+assert_checkerror("grand(4,3,2)", refMsg);
diff --git a/scilab/modules/randlib/tests/nonreg_tests/bug_14057.tst b/scilab/modules/randlib/tests/nonreg_tests/bug_14057.tst
new file mode 100644 (file)
index 0000000..ff407b5
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 14057 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14057
+//
+// <-- Short Description -->
+//    Calling grand(m,n) returned a wrong error and grand(m,n,p) called %s_grand
+//    function instead of an error.
+// =============================================================================
+
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"), "grand", 3);
+assert_checkerror("grand(2,3)", refMsg);
+
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"), "grand", 4);
+assert_checkerror("grand(4,3,2)", refMsg);