* Bug 15395 fixed: ones(2,3,2) / %z yielded an error (%s_r_p) 14/19714/3
Samuel GOUGEON [Thu, 1 Feb 2018 03:19:02 +0000 (04:19 +0100)]
  http://bugzilla.scilab.org/15395

Change-Id: I2c9a12e9f5cb1a1cf2a8ade3cadd156bdaca072f

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

index 2ea1d21..376db57 100644 (file)
@@ -516,6 +516,7 @@ Known issues
 * [#15360](http://bugzilla.scilab.org/show_bug.cgi?id=15360): `numer()` and `denom()` were almost useless, unused, and with more handy replacements. They are declared obsolete to be removed in Scilab 6.1.0.
 * [#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..
 
 
 ### Bugs fixed in 6.0.0:
index 03eb811..b28c1ef 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// 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 f=%s_r_p(m,p)
-    //f=M/p  M:scalar matrix p=polynomial
-    //!
+function f = %s_r_p(m, p)
+    // f=M/p  M:scalar matrix p=polynomial
 
-
-    [mp,np]=size(p)
-    if mp*np<>1 then
-        f=m*invr(p),
+    if m==[] then
+        f = []
+        return
+    end
+    sp = size(p)
+    if prod(sp) <> 1 then
+        f = m * invr(p),
     else
-        [l,c]=size(m)
-        if m<>[] then m=m+poly(0,varn(p),"coeff"),end
-        if mp==-1&l*c==1|l==-1 then
-            f=rlist(m,p*eye(),[])
+        // p scalar
+        m = m + poly(0,varn(p),"coeff")
+        sm = size(m)
+        // scalar / (eye()*%z  or eye() / p
+        if prod(sm)==1 & sp(1)==-1  | sm(1)==-1 then
+            f = rlist(m, p*eye(), [])
         else
-            f=simp(rlist(m,p*ones(l,c),[]))
+            f = rlist(m, p*ones(m), [])
+            f = simp(f)
         end
     end
 endfunction
diff --git a/scilab/modules/polynomials/tests/nonreg_tests/bug_15395.tst b/scilab/modules/polynomials/tests/nonreg_tests/bug_15395.tst
new file mode 100644 (file)
index 0000000..b9d01c4
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// 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 15395 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15395
+//
+// <-- Short Description -->
+// ones(2,3,2) / %z yielded an error
+
+o = ones(2,3,2);
+assert_checkequal(o/%z, rlist(o, o*%z));