Forbid creation of sparse matrix with sparse(hm) 03/17603/2
Pierre-Aime Agnel [Wed, 30 Dec 2015 13:42:46 +0000 (14:42 +0100)]
Change-Id: Ia8e28cf9e21d8c96b22d4557b88ce9c6e2e0a6cd

scilab/modules/ast/tests/unit_tests/sparse.dia.ref
scilab/modules/ast/tests/unit_tests/sparse.tst
scilab/modules/sparse/sci_gateway/cpp/sci_sparse.cpp

index 7402509..72bf0a3 100644 (file)
@@ -976,3 +976,10 @@ a=sparse([1 6;1 5;1 3;2 4;2 1;4 4;4 3;5 1;6 6],1:9,[6 6]);
 b=sparse([1 6;1 2;5 5],[10;-1;-1],[5 6]);
 assert_checkfalse(a==b);
 assert_checktrue(a<>b);
+// Sparse does not accept hypermatrices as input arguments
+A = hypermat([2 2 3], 1:12);
+msg = _("%s: Wrong size for input argument #%d: A m-by-n matrix expected.\n");
+funcname = "sparse";
+assert_checkerror("sparse(A)", msprintf(msg, funcname, 1));
+assert_checkerror("sparse(1, A, 1)", msprintf(msg, funcname, 2));
+assert_checkerror("sparse(1, 1, A)", msprintf(msg, funcname, 3));
index fe81969..79d0318 100644 (file)
@@ -1003,3 +1003,11 @@ b=sparse([1 6;1 2;5 5],[10;-1;-1],[5 6]);
 assert_checkfalse(a==b);
 assert_checktrue(a<>b);
 
+// Sparse does not accept hypermatrices as input arguments
+A = hypermat([2 2 3], 1:12);
+msg = _("%s: Wrong size for input argument #%d: A m-by-n matrix expected.\n");
+funcname = "sparse";
+assert_checkerror("sparse(A)", msprintf(msg, funcname, 1));
+
+assert_checkerror("sparse(1, A, 1)", msprintf(msg, funcname, 2));
+assert_checkerror("sparse(1, 1, A)", msprintf(msg, funcname, 3));
index 6c14bb6..b0d4874 100644 (file)
@@ -37,6 +37,7 @@ types::Function::ReturnValue sci_sparse(types::typed_list &in, int _piRetCount,
 
     for (int i = 0 ; isValid && i < in.size() ; i++)
     {
+        // Valid input arguments are of Bool and Double types (dense or sparse)
         switch (in[i]->getType())
         {
             case types::InternalType::ScilabBool :
@@ -60,6 +61,14 @@ types::Function::ReturnValue sci_sparse(types::typed_list &in, int _piRetCount,
             Scierror(999, _("%s: Wrong type for input argument #%d: Matrix expected.\n"), "sparse", i + 1);
             return types::Function::Error;
         }
+
+        // Valid input arguments are matrices and not hypermatrices
+        if ( in[i]->getAs<types::GenericType>()->getDims() > 2 )
+        {
+            Scierror(999, _("%s: Wrong size for input argument #%d: A m-by-n matrix expected.\n"), "sparse", i + 1);
+            return types::Function::Error;
+        }
+
     }
     // if one argument is given, it will be a matrix of constant or sparse type, which will be converted into a sparse matrix
     if (in.size() == 1)