* Bug 15396 fixed: [m,n,p]=size(hr) failed with an hypermat of rationals (%r_size) 15/19715/4
Samuel GOUGEON [Thu, 1 Feb 2018 03:52:05 +0000 (04:52 +0100)]
  http://bugzilla.scilab.org/15396

Change-Id: I8395d6adfe72edd47447d0ee2974cfd042b6dbc1

scilab/CHANGES.md
scilab/modules/overloading/macros/%r_size.sci
scilab/modules/polynomials/tests/nonreg_tests/bug_15396.tst [new file with mode: 0644]

index 5b1e4db..8afba46 100644 (file)
@@ -517,6 +517,7 @@ Known issues
 * [#15370](http://bugzilla.scilab.org/show_bug.cgi?id=15370): `bezout()` mishandled its output arguments.
 * [#15375](http://bugzilla.scilab.org/show_bug.cgi?id=15375): A .zcos file opened as a palette was greyed out.
 * [#15395](http://bugzilla.scilab.org/show_bug.cgi?id=15395): `ones(2,3,2) / %z` yielded an error..
+* [#15396](http://bugzilla.scilab.org/show_bug.cgi?id=15396): `[m,n,p] = size(hr)` yielded an error with an hypermatrix hr of rationals.
 * [#15405](http://bugzilla.scilab.org/show_bug.cgi?id=15405): Accessing int64 hdf5 values crashed scilab.
 
 
index 7de4cc0..fabe8a9 100644 (file)
@@ -1,6 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
 // Copyright (C) DIGITEO - 2012 - Allan CORNET
+// Copyright (C) 2018 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [m, n, nx] = %r_size(x, flag)
-    // only to be called by size function for dynamical systems
-    //!
-    m = 0;
-    n = 0;
+function varargout = %r_size(x, flag)
+    // only to be called by size()
+
     [lhs,rhs] = argn(0)
-    x1 = x(1);
+    x = x.num;
     if lhs == 1 then
         if rhs == 1 then
-            execstr("m = size(x(''num''));","errcatch");
+            m = size(x)
         else
-            execstr("m = size(x(''num''), flag);","errcatch");
+            m = size(x, flag)
         end
-    elseif lhs == 2 then
-        if rhs <> 1 then
-            error(41)
+        varargout = list(m)
+    else
+        if rhs > 1 then
+            msg = _("%s: Wrong number of output arguments: %d expected.\n");
+            error(msprintf(msg, "%r_size", 1));
         end
-        execstr("[m, n] = size(x(''num''));","errcatch");
+        s = size(x);
+        execstr("varargout = list("+strcat(msprintf("%d\n",s'), ",")+")")
     end
 endfunction
diff --git a/scilab/modules/polynomials/tests/nonreg_tests/bug_15396.tst b/scilab/modules/polynomials/tests/nonreg_tests/bug_15396.tst
new file mode 100644 (file)
index 0000000..a242595
--- /dev/null
@@ -0,0 +1,36 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15396
+//
+// <-- Short Description -->
+// [m,n,p] = size(hr) yielded an error for an hypermatrix hr of rationals
+
+o = ones(5,4,3,2);
+r = rlist(o, o*%z)
+
+assert_checkequal(size(r), [5 4 3 2]);
+assert_checkequal(size(r, "*"), 120);
+assert_checkequal(size(r, 1), 5);
+assert_checkequal(size(r, "r"), 5);
+assert_checkequal(size(r, 2), 4);
+assert_checkequal(size(r, "c"), 4);
+assert_checkequal(size(r, 3), 3);
+assert_checkequal(size(r, 4), 2);
+
+[m, n] = size(r);
+assert_checkequal([m n], [5 4]);
+[m, n, p] = size(r);
+assert_checkequal([m n p], [5 4 3]);
+[m, n, p, q] = size(r);
+assert_checkequal([m n p q], [5 4 3 2]);