fix matrix() with empty struct/cell 66/19466/2
Antoine ELIAS [Sat, 7 Oct 2017 22:16:41 +0000 (00:16 +0200)]
Change-Id: I3d1b8e410401629b43f032a1c6dddb949a287e1f

scilab/modules/elementary_functions/sci_gateway/cpp/sci_matrix.cpp
scilab/modules/elementary_functions/tests/unit_tests/ismatrix.dia.ref [deleted file]
scilab/modules/elementary_functions/tests/unit_tests/ismatrix.tst
scilab/modules/elementary_functions/tests/unit_tests/isrow.dia.ref [deleted file]
scilab/modules/elementary_functions/tests/unit_tests/isrow.tst
scilab/modules/elementary_functions/tests/unit_tests/isscalar.dia.ref [deleted file]
scilab/modules/elementary_functions/tests/unit_tests/isscalar.tst
scilab/modules/linear_algebra/macros/squeeze.sci

index b69543c..52d51c3 100644 (file)
@@ -18,6 +18,8 @@
 #include "function.hxx"
 #include "double.hxx"
 #include "string.hxx"
+#include "struct.hxx"
+#include "cell.hxx"
 #include "overload.hxx"
 
 extern "C"
@@ -60,7 +62,19 @@ types::Function::ReturnValue sci_matrix(types::typed_list &in, int _iRetCount, t
     pGTIn = in[0]->getAs<types::GenericType>();
     if (pGTIn->getSize() == 0)
     {
-        out.push_back(types::Double::Empty());
+        if (pGTIn->isStruct())
+        {
+            out.push_back(new types::Struct());
+        }
+        else if (pGTIn->isCell())
+        {
+            out.push_back(new types::Cell());
+        }
+        else
+        {
+            out.push_back(types::Double::Empty());
+        }
+
         return types::Function::OK;
     }
 
diff --git a/scilab/modules/elementary_functions/tests/unit_tests/ismatrix.dia.ref b/scilab/modules/elementary_functions/tests/unit_tests/ismatrix.dia.ref
deleted file mode 100644 (file)
index 6913f57..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-//
-// <-- CLI SHELL MODE -->
-//
-// unit tests for ismatrix function
-// =============================================================================
-// Constants
-assert_checkequal(ismatrix([1 2 3]), %t);
-assert_checkequal(ismatrix([1 2 3]'), %t);
-assert_checkequal(ismatrix([1 2 3; 1 2 3]), %t);
-assert_checkequal(ismatrix(1), %t);
-assert_checkequal(ismatrix(rand(2,3,2)), %f);
-assert_checkequal(ismatrix(rand(2,1,3)), %t);
-assert_checkequal(ismatrix([]), %f);
-// Strings
-assert_checkequal(ismatrix(["s" "t" "u"]), %t);
-assert_checkequal(ismatrix(["s" "t" "u"]'), %t);
-assert_checkequal(ismatrix(["s" "t" "u";"s" "t" "u"]), %t);
-assert_checkequal(ismatrix("s"), %t);
-assert_checkequal(ismatrix(matrix(["s";"s";"s";"s";"s";"s";"s";"s"], [2,2,2])), %f);
-// Polynomials
-s=poly(0,"s");
-assert_checkequal(ismatrix([1+s 2+s]), %t);
-assert_checkequal(ismatrix([1+s 2+s]'), %t);
-assert_checkequal(ismatrix([1+s 2+s 3+s; 3+s 4+s 5+s]), %t);
-assert_checkequal(ismatrix(1+s), %t);
-assert_checkequal(ismatrix(matrix([s;s;s;s;s;s;s;s;], [2,2,2])), %f);
-// Booleans
-assert_checkequal(ismatrix([%t %f]), %t);
-assert_checkequal(ismatrix([%t %f]'), %t);
-assert_checkequal(ismatrix([%t %f %t; %f %t %f]), %t);
-assert_checkequal(ismatrix(%t), %t);
-assert_checkequal(ismatrix(matrix([%t;%t;%t;%t;%t;%t;%t;%t], [2,2,2])), %f);
-// Sparses
-assert_checkequal(ismatrix(sparse([1 0 2])), %t);
-assert_checkequal(ismatrix(sparse([1 0 2])'), %t);
-assert_checkequal(ismatrix(sparse([1 0 3; 2 0 1])), %t);
-assert_checkequal(ismatrix(sparse(0)), %t);
-// Structures
-clear s;
-assert_checkequal(ismatrix(struct()), %f); // Empty structure
-s.a = "test";
-assert_checkequal(ismatrix(s), %t); // Scalar structure
-clear s;
-s(3,1).a = %pi;
-assert_checkequal(ismatrix(s), %t); // Column structure
-clear s;
-s(3,1,1).a = %pi;
-assert_checkequal(ismatrix(s), %t); // Column structure
-clear s;
-s(1,3).a = %e;
-assert_checkequal(ismatrix(s), %t); // Row structure
-clear s;
-s(1,1,3).a = %e;
-assert_checkequal(ismatrix(s), %t); // Row structure
-clear s;
-s(3,2).a = %z;
-assert_checkequal(ismatrix(s), %t); // 2D structure array (not square)
-clear s;
-s(2,2,2).a = %s;
-assert_checkequal(ismatrix(s), %f); // 3D structure array (cube)
-clear s;
-s(2,1,2).a = %s;
-assert_checkequal(ismatrix(s), %t); // 3D structure array with singleton
-// Cells
-assert_checkequal(ismatrix(cell()), %f); // Empty cell
-a = cell(1);
-a{1} = 1;
-assert_checkequal(ismatrix(a), %t); // Scalar case
-clear a;
-a = cell(1,3);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(ismatrix(a), %t); // Row case
-clear a;
-a = cell(3,1);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(ismatrix(a), %t); // Column case
-clear a;
-a = cell(3,2);
-a{1,1} = 1:3;
-a{1,2} = 1:3;
-a{2,1} = 1:3;
-a{2,2} = 1:3;
-a{3,2} = 1:3;
-a{3,1} = 1:3;
-assert_checkequal(ismatrix(a), %t); // Matrix case
-clear a;
-a = cell(2,2,2);
-a{1,1,1} =1:3;
-a{1,2,1} =1:3;
-a{2,1,1} =1:3;
-a{2,2,1} =1:3;
-a{1,1,2} =1:3;
-a{1,2,2} =1:3;
-a{2,1,2} =1:3;
-a{2,2,2} =1:3;
-assert_checkequal(ismatrix(a), %f); // Cubic case
-a = cell(2,1,2);
-a{1,1,1}=1:3;
-a{2,1,1}=1:3;
-a{1,1,2}=1:3;
-a{2,1,2}=1:3;
-assert_checkequal(ismatrix(a), %t); // Hypermatrix with singleton (square)
-// Lists
-assert_checkequal(ismatrix(list()), %f); // Empty list
-l=list(1);
-assert_checkequal(ismatrix(l), %t); // Scalar case
-clear l;
-l=list(1,"test");
-assert_checkequal(ismatrix(l), %t); // Column case
-// Error messages
-errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"ismatrix", 1);
-assert_checkerror("ismatrix()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
-assert_checkerror("ismatrix(1,2)", errmsg2);
-errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
-assert_checkerror("[r,b]=ismatrix([1 2 3]);", errmsg3);
index 4cadfe4..0804944 100644 (file)
@@ -6,6 +6,7 @@
 // =============================================================================
 //
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
 //
 // unit tests for ismatrix function
 // =============================================================================
@@ -129,7 +130,7 @@ assert_checkequal(ismatrix(l), %t); // Column case
 // Error messages
 errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"ismatrix", 1);
 assert_checkerror("ismatrix()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
+errmsg2 = msprintf(_("Wrong number of input arguments.\n"));
 assert_checkerror("ismatrix(1,2)", errmsg2);
 errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
 assert_checkerror("[r,b]=ismatrix([1 2 3]);", errmsg3);
diff --git a/scilab/modules/elementary_functions/tests/unit_tests/isrow.dia.ref b/scilab/modules/elementary_functions/tests/unit_tests/isrow.dia.ref
deleted file mode 100644 (file)
index f5e3f62..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-//
-// <-- CLI SHELL MODE -->
-//
-// unit tests for isrow function
-// =============================================================================
-// Constants
-assert_checkequal(isrow([1 2 3]), %t);
-assert_checkequal(isrow([1 2 3]'), %f);
-assert_checkequal(isrow([1 2 3; 1 2 3]), %f);
-assert_checkequal(isrow(1), %t);
-assert_checkequal(isrow(rand(1,1,3)), %t);
-assert_checkequal(isrow(rand(2,1,1)), %f);
-assert_checkequal(isrow([]), %f);
-// Strings
-assert_checkequal(isrow(["s" "t" "u"]), %t);
-assert_checkequal(isrow(["s" "t" "u"]'), %f);
-assert_checkequal(isrow(["s" "t" "u";"s" "t" "u"]), %f);
-assert_checkequal(isrow("s"), %t);
-assert_checkequal(isrow(matrix(["s";"s";"s"], [1,1,3])), %t);
-assert_checkequal(isrow(matrix(["s";"s"], [2,1,1])), %f);
-// Polynomials
-s=poly(0,"s");
-assert_checkequal(isrow([1+s 2+s]), %t);
-assert_checkequal(isrow([1+s 2+s]'), %f);
-assert_checkequal(isrow([1+s 2+s; 3+s 4+s]), %f);
-assert_checkequal(isrow(1+s), %t);
-assert_checkequal(isrow(matrix([s;s;s], [1,1,3])), %t);
-assert_checkequal(isrow(matrix([s;s], [2,1,1])), %f);
-// Booleans
-assert_checkequal(isrow([%t %f]), %t);
-assert_checkequal(isrow([%t %f]'), %f);
-assert_checkequal(isrow([%t %f; %f %t]), %f);
-assert_checkequal(isrow(%t), %t);
-assert_checkequal(isrow(matrix([%t;%t;%t], [1,1,3])), %t);
-assert_checkequal(isrow(matrix([%t;%t], [2,1,1])), %f);
-// Sparses
-assert_checkequal(isrow(sparse([1 0 2])), %t);
-assert_checkequal(isrow(sparse([1 0 2])'), %f);
-assert_checkequal(isrow(sparse([1 0 2; 0 1 3])), %f);
-assert_checkequal(isrow(sparse(0)), %t);
-// Structures
-clear s;
-assert_checkequal(isrow(struct()), %f); // Empty structure
-s.a = "test";
-assert_checkequal(isrow(s), %t); // Scalar structure
-clear s;
-s(3,1).a = %pi;
-assert_checkequal(isrow(s), %f); // Column structure
-clear s;
-s(1,3).a = %e;
-assert_checkequal(isrow(s), %t); // Row structure
-clear s;
-s(1,1,3).a = %pi;
-assert_checkequal(issquare(s), %f); // Row structure
-clear s;
-s(3,2).a = %z;
-assert_checkequal(isrow(s), %f); // 2D structure array (not square)
-clear s;
-s(2,2,2).a = %s;
-assert_checkequal(isrow(s), %f); // 3D structure array (cube)
-clear s;
-s(2,1,2).a = %s;
-assert_checkequal(isrow(s), %f); // 3D structure array with singleton (square)
-// Cells
-assert_checkequal(isrow(cell()), %f); // Empty cell
-a = cell(1);
-a{1} = 1;
-assert_checkequal(isrow(a), %t); // Scalar case
-clear a;
-a = cell(1,3);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(isrow(a), %t); // Row case
-clear a;
-a = cell(3,1);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(isrow(a), %f); // Column case
-clear a;
-a = cell(3,2);
-a{1,1} = 1:3;
-a{1,2} = 1:3;
-a{2,1} = 1:3;
-a{2,2} = 1:3;
-a{3,2} = 1:3;
-a{3,1} = 1:3;
-assert_checkequal(isrow(a), %f); // Matrix case
-clear a;
-a = cell(2,2,2);
-a{1,1,1} =1:3;
-a{1,2,1} =1:3;
-a{2,1,1} =1:3;
-a{2,2,1} =1:3;
-a{1,1,2} =1:3;
-a{1,2,2} =1:3;
-a{2,1,2} =1:3;
-a{2,2,2} =1:3;
-assert_checkequal(isrow(a), %f); // Cubic case
-a = cell(2,1,2);
-a{1,1,1}=1:3;
-a{2,1,1}=1:3;
-a{1,1,2}=1:3;
-a{2,1,2}=1:3;
-assert_checkequal(isrow(a), %f); // Hypermatrix with singleton (square)
-// Lists
-assert_checkequal(isrow(list()), %f); // Empty list
-l=list(1);
-assert_checkequal(isrow(l), %t); // Scalar case
-clear l;
-l=list(1,"test");
-assert_checkequal(isrow(l), %f); // Column case
-// Error messages
-errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"isrow", 1);
-assert_checkerror("isrow()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
-assert_checkerror("isrow(1,2)", errmsg2);
-errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
-assert_checkerror("[r,b]=isrow([1 2 3]);", errmsg3);
index 7767cec..b19ec37 100644 (file)
@@ -6,6 +6,7 @@
 // =============================================================================
 //
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
 //
 // unit tests for isrow function
 // =============================================================================
@@ -129,7 +130,7 @@ assert_checkequal(isrow(l), %f); // Column case
 // Error messages
 errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"isrow", 1);
 assert_checkerror("isrow()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
+errmsg2 = msprintf(_("Wrong number of input arguments.\n"));
 assert_checkerror("isrow(1,2)", errmsg2);
 errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
 assert_checkerror("[r,b]=isrow([1 2 3]);", errmsg3);
diff --git a/scilab/modules/elementary_functions/tests/unit_tests/isscalar.dia.ref b/scilab/modules/elementary_functions/tests/unit_tests/isscalar.dia.ref
deleted file mode 100644 (file)
index 5f9bdc3..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-// =============================================================================
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
-//
-//  This file is distributed under the same license as the Scilab package.
-// =============================================================================
-//
-// <-- ENGLISH IMPOSED -->
-// <-- CLI SHELL MODE -->
-//
-// unit tests for isscalar function
-// =============================================================================
-// Constants
-assert_checkequal(isscalar([1 2 3]), %f);
-assert_checkequal(isscalar([1 2 3]'), %f);
-assert_checkequal(isscalar([1 2; 1 2]), %f);
-assert_checkequal(isscalar(1), %t);
-assert_checkequal(isscalar([]), %f);
-// Strings
-assert_checkequal(isscalar(["s" "s"; "s" "s"]), %f);
-assert_checkequal(isscalar("s"), %t);
-// Polynomials
-s=poly(0,"s");
-assert_checkequal(isscalar([s s; s s]), %f);
-assert_checkequal(isscalar(1+s), %t);
-// Booleans
-assert_checkequal(isscalar([%t %t; %t %t]), %f);
-assert_checkequal(isscalar(%t), %t);
-// Sparses
-assert_checkequal(isscalar(sparse([1 2; 1 2])), %f);
-assert_checkequal(isscalar(sparse(0)), %t);
-// Structures
-clear s;
-assert_checkequal(isscalar(struct()), %f); // Empty structure
-s(1,1).a = "test";
-assert_checkequal(isscalar(s), %t); // Scalar structure
-clear s;
-s(3,1).a = %pi;
-assert_checkequal(isscalar(s), %f); // Column structure
-clear s;
-s(1,3).a = %e;
-assert_checkequal(isscalar(s), %f); // Row structure
-clear s;
-s(3,2).a = %z;
-assert_checkequal(isscalar(s), %f); // 2D structure array (not square)
-clear s;
-s(2,2,2).a = %s;
-assert_checkequal(isscalar(s), %f); // 3D structure array (cube)
-clear s;
-s(2,1,2).a = %s;
-assert_checkequal(isscalar(s), %f); // 3D structure array with singleton (square)
-// Cells
-assert_checkequal(isscalar(cell()), %f); // Empty cell
-a = cell(1);
-a{1} = 1;
-assert_checkequal(isscalar(a), %t); // Scalar case
-clear a;
-a = cell(1,3);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(isscalar(a), %f); // Row case
-clear a;
-a = cell(3,1);
-a{1} = 1:3;
-a{2} = 1:3;
-a{3} = 1:3;
-assert_checkequal(isscalar(a), %f); // Column case
-clear a;
-a = cell(3,2);
-a{1,1} = 1:3;
-a{1,2} = 1:3;
-a{2,1} = 1:3;
-a{2,2} = 1:3;
-a{3,2} = 1:3;
-a{3,1} = 1:3;
-assert_checkequal(isscalar(a), %f); // Matrix case
-clear a;
-a = cell(2,2,2);
-a{1,1,1} =1:3;
-a{1,2,1} =1:3;
-a{2,1,1} =1:3;
-a{2,2,1} =1:3;
-a{1,1,2} =1:3;
-a{1,2,2} =1:3;
-a{2,1,2} =1:3;
-a{2,2,2} =1:3;
-assert_checkequal(isscalar(a), %f); // Cubic case
-a = cell(2,1,2);
-a{1,1,1}=1:3;
-a{2,1,1}=1:3;
-a{1,1,2}=1:3;
-a{2,1,2}=1:3;
-assert_checkequal(isscalar(a), %f); // Hypermatrix with singleton (square)
-// Lists
-assert_checkequal(isscalar(list()), %f); // Empty list
-l=list(1);
-assert_checkequal(isscalar(l), %t); // Scalar case
-clear l;
-l=list(1,"test");
-assert_checkequal(isscalar(l), %f); // Column case
-// Error messages
-errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"isscalar", 1);
-assert_checkerror("isscalar()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
-assert_checkerror("isscalar(1,2)", errmsg2);
-errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
-assert_checkerror("[r,b]=isscalar([1 2 3]);", errmsg3);
index 3e36309..0ede5e4 100644 (file)
@@ -5,8 +5,9 @@
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 //
-// <-- ENGLISH IMPOSED -->
 // <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
 //
 // unit tests for isscalar function
 // =============================================================================
@@ -111,7 +112,7 @@ assert_checkequal(isscalar(l), %f); // Column case
 // Error messages
 errmsg1 = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"),"isscalar", 1);
 assert_checkerror("isscalar()", errmsg1);
-errmsg2 = msprintf(_("Wrong number of input arguments."));
+errmsg2 = msprintf(_("Wrong number of input arguments.\n"));
 assert_checkerror("isscalar(1,2)", errmsg2);
 errmsg3 = msprintf(_("Wrong number of output arguments.\n"));
 assert_checkerror("[r,b]=isscalar([1 2 3]);", errmsg3);
index ffb8250..04406ad 100644 (file)
@@ -24,7 +24,7 @@ function A = squeeze(A)
     // ------------------------------------------------------------
 
     Dims=size(A);
-    if or(size(Dims,"*") > 2 || typeof(A)==["ce","st"]) then
+    if or(size(Dims,"*") > 2 | typeof(A)==["ce","st"]) then
         Dims=size(A);
         newDims = Dims(Dims <> 1);
         if size(newDims,"*") < 2 then