zeros function corrected. 73/11473/3
Cedric Delamarre [Fri, 10 May 2013 13:46:07 +0000 (15:46 +0200)]
zeros(sprand(3,5,0.1))
zeros(int16([1 2 3]))
zeros(list(1,2,3)) -> trigger a error

Change-Id: I4dafa7e2673fb1d137a4a5f4c89deca181f6d4a8

scilab/modules/elementary_functions/sci_gateway/cpp/sci_zeros.cpp

index d998551..97eddd3 100644 (file)
@@ -27,22 +27,19 @@ using namespace types;
 /*--------------------------------------------------------------------------*/
 Function::ReturnValue sci_zeros(types::typed_list &in, int _iRetCount, types::typed_list &out)
 {
-    for(int i = 0 ; i < in.size() ; i++)
-    {
-        if(in[i]->isDouble() == false)
-        {
-            Scierror(999, _("%s: Wrong type for input argument #%d: Matrix expected.\n"), "zeros", i + 1);
-            return Function::Error;
-        }
-    }
-
     Double* pOut = NULL;
-    if(in.size() == 0)
+    if (in.size() == 0)
     {
         pOut = new Double(0);
     }
-    else if(in.size() == 1)
+    else if (in.size() == 1)
     {
+        if (in[0]->isGenericType() == false || in[0]->isContainer())
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: Matrix expected.\n"), "zeros", 1);
+            return Function::Error;
+        }
+
         Double* pIn = in[0]->getAs<Double>();
         int iDims = pIn->getDims();
         int* piDims = pIn->getDimsArray();
@@ -51,12 +48,21 @@ Function::ReturnValue sci_zeros(types::typed_list &in, int _iRetCount, types::ty
     }
     else //size > 1
     {
+        for (int i = 0 ; i < in.size() ; i++)
+        {
+            if (in[i]->isDouble() == false)
+            {
+                Scierror(999, _("%s: Wrong type for input argument #%d: Matrix expected.\n"), "zeros", i + 1);
+                return Function::Error;
+            }
+        }
+
         int iDims = static_cast<int>(in.size());
         int* piDims = new int[iDims];
-        for(int i = 0 ; i < iDims ; i++)
+        for (int i = 0 ; i < iDims ; i++)
         {
             Double* pIn = in[i]->getAs<Double>();
-            if(pIn->isScalar() == false || pIn->isComplex())
+            if (pIn->isScalar() == false || pIn->isComplex())
             {
                 Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), "zeros", i + 1);
                 return Function::Error;
@@ -68,10 +74,7 @@ Function::ReturnValue sci_zeros(types::typed_list &in, int _iRetCount, types::ty
     }
 
     pOut->setZeros();
-    //for(int i = 0 ; i < pOut->getSize() ; i++)
-    //{
-    //    pOut->set(i,i);
-    //}
+
     out.push_back(pOut);
     return Function::OK;
 }