* Bug 15770 fixed: now zpss and zp2tf unitary tests succeed 04/20504/7
St├ęphane Mottelet [Tue, 18 Sep 2018 13:31:12 +0000 (15:31 +0200)]
test_run zp2ss and zp2tf were faling because
not real conjugate zeros and poles were incorrectly
checked

http://bugzilla.scilab.org/show_bug.cgi?id=15770
http://bugzilla.scilab.org/show_bug.cgi?id=15734

The proposed solution does not rely on intersect()
and simply checks if the polynomial built with the zeros
or the poles is real.

Change-Id: I7e89aedd210e63abdd7f6e4c57280f0dcc1708bd

scilab/CHANGES.md
scilab/modules/cacsd/macros/zp2ss.sci
scilab/modules/cacsd/macros/zp2tf.sci
scilab/modules/cacsd/tests/nonreg_tests/bug_15770.tst [new file with mode: 0644]

index de48323..ae5d5fe 100644 (file)
@@ -607,6 +607,7 @@ Known issues
 * [#15733](http://bugzilla.scilab.org/show_bug.cgi?id=15733): Some fixes after `deg(0*%s)` => `-%inf`.
 * [#15735](http://bugzilla.scilab.org/show_bug.cgi?id=15735): `interp1` yielded some []+n warnings.
 * [#15736](http://bugzilla.scilab.org/show_bug.cgi?id=15736): `unique` failed with complex numbers.
+* [#15740](http://bugzilla.scilab.org/show_bug.cgi?id=15740): now `(%s == %z) == %f` and `(%s ~= %z) == %t` 
 * [#15741](http://bugzilla.scilab.org/show_bug.cgi?id=15741):  Operations between 2 polynomials with distinct variables no longer called the corresponding overloads (Regression)
 * [#15746](http://bugzilla.scilab.org/show_bug.cgi?id=15746): `1/[1 2 3]` and `[1 2 3]'\1` did not raise an error
 * [#15747](http://bugzilla.scilab.org/show_bug.cgi?id=15747): no output in overloaded operator crashed Scilab
@@ -614,6 +615,7 @@ Known issues
 * [#15757](http://bugzilla.scilab.org/show_bug.cgi?id=15757): The public function `xcosPalAddBlock` did not load scicos_scicoslib when needed, and then yielded an error. When the block is specified as a .sod file and the file does not exist, the error message was obscur.
 * [#15758](http://bugzilla.scilab.org/show_bug.cgi?id=15758): sparse([0 0],1) crashes scilab (regression)
 * [#15762](http://bugzilla.scilab.org/show_bug.cgi?id=15762): `error()` refused multiline error messages.
+* [#15770](http://bugzilla.scilab.org/show_bug.cgi?id=15770): zp2ss and zp2tf unitary tests were failing
 * [#15774](http://bugzilla.scilab.org/show_bug.cgi?id=15774): `clean()` failed on sparse complex matrix.
 * [#15778](http://bugzilla.scilab.org/show_bug.cgi?id=15778): Deleting some rows or columns of a boolean sparse array with `= []` crashed Scilab
 * [#15779](http://bugzilla.scilab.org/show_bug.cgi?id=15779): `test_run` did not accept the wildcard * in tests names.
@@ -622,7 +624,6 @@ Known issues
 * [#15818](http://bugzilla.scilab.org/show_bug.cgi?id=15818): `polarplot()` example could not be subplotted. `polarplot`'s demo did not display 'View code' and too often prompted the user.
 * [#15847](http://bugzilla.scilab.org/show_bug.cgi?id=15847): Scilab crashed at startup.
 * [#15854](http://bugzilla.scilab.org/show_bug.cgi?id=15854): `horner(1:$,4)` yielded an error. Extractions from `cblock` tables were impacted.
-* [#15740](http://bugzilla.scilab.org/show_bug.cgi?id=15740): now `(%s == %z) == %f` and `(%s ~= %z) == %t` 
 
 
 ### Bugs fixed in 6.0.1:
index 650c954..2395101 100644 (file)
@@ -15,9 +15,7 @@ function s=zp2ss(Z,P,K,dt)
     if siso then Z=Z(:);end
 
     for k=1:size(Z,2)
-        z=Z(:,k);
-        Zc=z(imag(z)<>0);nc=size(Zc,"*");
-        if modulo(nc,2)<>0|size(intersect(Zc,conj(Zc)),"*")<nc/2 then
+        if ~isreal(poly(Z(:,k),'x')) then
             error(msprintf(_("%s: Wrong value for input argument #%d: complex zeros  must appear in complex conjugate pairs.\n"),"zp2ss",1))
         end
     end
@@ -25,8 +23,7 @@ function s=zp2ss(Z,P,K,dt)
     if type(P)<>1 then
         error(msprintf(_("%s: Wrong type for input argument #%d: Real or complex vector expected.\n"),"zp2ss",2))
     end
-    Pc=P(imag(P)<>0);nc=size(Pc,"*");
-    if modulo(nc,2)<>0|size(intersect(Pc,conj(Pc)),"*")<nc/2 then
+    if ~isreal(poly(P,'x')) then
         error(msprintf(_("%s: Wrong value for input argument #%d: complex poles  must appear in complex conjugate pairs.\n"),"zp2ss",2))
     end
 
index 1d8f5c3..9667859 100644 (file)
@@ -15,9 +15,7 @@ function s=zp2tf(Z,P,K,dt)
     siso=and(size(K)==1)
     if siso then Z=Z(:);end
     for k=1:size(Z,2)
-        z=Z(:,k);
-        Zc=z(imag(z)<>0);nc=size(Zc,"*");
-        if modulo(nc,2)<>0|size(intersect(Zc,conj(Zc)),"*")<nc/2 then
+        if ~isreal(poly(Z(:,k),'x')) then
             error(msprintf(_("%s: Wrong value for input argument #%d: complex zeros  must appear in complex conjugate pairs.\n"),"zp2tf",1))
         end
     end
@@ -25,8 +23,7 @@ function s=zp2tf(Z,P,K,dt)
     if type(P)<>1 then
         error(msprintf(_("%s: Wrong type for input argument #%d: Real or complex vector expected.\n"),"zp2tf",2))
     end
-    Pc=P(imag(P)<>0);nc=size(Pc,"*");
-    if modulo(nc,2)<>0|size(intersect(Pc,conj(Pc)),"*")<nc/2 then
+    if ~isreal(poly(P,'x')) then
         error(msprintf(_("%s: Wrong value for input argument #%d: complex poles  must appear in complex conjugate pairs.\n"),"zp2tf",2))
     end
 
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_15770.tst b/scilab/modules/cacsd/tests/nonreg_tests/bug_15770.tst
new file mode 100644 (file)
index 0000000..c0456bc
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15770 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15770
+//
+// <-- Short Description -->
+// test_run cacsd zp2ss and zp2tf fail 
+
+sz=zp2ss([%i %i -%i -%i],1,1);
+[a,b,c,d]=abcd(sz);
+assert_checkalmostequal([a b c d],[1 1 1 1+%z]);
+assert_checkequal(zp2tf([%i %i -%i -%i],1,1),(1+2*%z^2+%z^4)/(-1+%z));