* Bug #7794 fixed - Example of findABCD help page failed. 10/18610/4
Adeline CARNIS [Fri, 21 Oct 2016 10:19:51 +0000 (12:19 +0200)]
Change-Id: I6dbec6698f3e1dbc936d1e9c4f80893f09a42040

scilab/modules/cacsd/sci_gateway/c/sci_findbd.c
scilab/modules/cacsd/sci_gateway/c/sci_sident.c
scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref [new file with mode: 0644]
scilab/modules/cacsd/tests/nonreg_tests/bug_7794.tst [new file with mode: 0644]

index 5a12837..2f38b12 100644 (file)
@@ -197,7 +197,7 @@ int sci_findbd(char *fname, void* pvApiCtx)
 
     if (iTASK == 1)
     {
-        cJOBX0 = 'Q';
+        cJOBX0 = 'X';
     }
 
     // comuse
@@ -366,7 +366,7 @@ int sci_findbd(char *fname, void* pvApiCtx)
     }
 
     // D(1,m)
-    if (iTASK == 1 && iCUSE == 2 && iIJOB == 2 && iRhs <= iIP)
+    if (iTASK == 1 && iCUSE == 2 && iIJOB == 2 && iRhs >= iIP)
     {
         int* piAddr = NULL;
         int iRows = 0;
@@ -425,6 +425,8 @@ int sci_findbd(char *fname, void* pvApiCtx)
             Scierror(999, _("%s: Wrong size for input argument #%d: A matrix with %d columns expected.\n"), fname, iL);
             return 0;
         }
+
+        iIP++;
     }
 
     // U(txm)
@@ -442,7 +444,7 @@ int sci_findbd(char *fname, void* pvApiCtx)
             return 0;
         }
 
-        getMatrixOfDouble(pvApiCtx, piAddr, &iNSMP, &iCols, &pdblU);
+        getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblU);
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
index 9fa6437..d0e2088 100644 (file)
@@ -212,8 +212,11 @@ int sci_sident(char *fname, void* pvApiCtx)
         case 2 :
             cMETH = 'N';
             break;
+        case 3 :
+            cMETH = 'C';
+            break;
         default :
-            Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 1, "1", "2");
+            Scierror(999, _("%s: Wrong value for input argument #%d: '%s', '%s' or '%s' expected.\n"), fname, 1, "1", "2", "3");
             return 0;
     }
 
@@ -232,8 +235,11 @@ int sci_sident(char *fname, void* pvApiCtx)
         case 3 :
             cJOB = 'B';
             break;
+        case 4 :
+            cJOB = 'D';
+            break;
         default:
-            Scierror(999, _("%s: Wrong value for input argument #%d: '%s', '%s' or '%s' expected.\n"), fname, 2, "1", "2", "3");
+            Scierror(999, _("%s: Wrong value for input argument #%d: '%s', '%s', '%s' or '%s' expected.\n"), fname, 2, "1", "2", "3", "4");
             return 0;
     }
 
@@ -333,7 +339,7 @@ int sci_sident(char *fname, void* pvApiCtx)
     {
         cJOBCK = 'K';
         CHECK_PARAM(pvApiCtx, 8);
-        iNSMPL = getInputArgumentType(pvApiCtx, 8);
+        iNSMPL = getIntegerValue(pvApiCtx, 8);
 
         if (iNSMPL != 0 && iNSMPL < iNR)
         {
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref b/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.dia.ref
new file mode 100644 (file)
index 0000000..e03e324
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7794 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7794
+//
+// <-- Short Description -->
+//  Example of findABCD help page failed.
+A = [ 0.5, 0.1,-0.1, 0.2;
+      0.1, 0,  -0.1,-0.1;      
+     -0.4,-0.6,-0.7,-0.1;  
+      0.8, 0,  -0.6,-0.6];
+B = [0.8;0.1;1;-1];
+C = [1 2 -1 0];
+SYS=syslin(0.1,A,B,C);
+nsmp=100;
+U=prbs_a(nsmp,nsmp/5);
+Y=(flts(U,SYS)+0.3*rand(1,nsmp,'normal'));
+// Compute R
+S=15;
+[R,N1,SVAL] = findR(S,Y',U');
+N=3;
+SYS1 = findABCD(S,N,1,R) ;SYS1.dt=0.1;
+SYS1.X0 = inistate(SYS1,Y',U');
+expectedX0 = [0.180418869; 0.18003251391; -0.06993989023];
+assert_checkalmostequal(SYS1.X0, expectedX0, 1.e-8);
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.tst b/scilab/modules/cacsd/tests/nonreg_tests/bug_7794.tst
new file mode 100644 (file)
index 0000000..a211046
--- /dev/null
@@ -0,0 +1,38 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7794 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7794
+//
+// <-- Short Description -->
+//  Example of findABCD help page failed.
+
+A = [ 0.5, 0.1,-0.1, 0.2;
+      0.1, 0,  -0.1,-0.1;      
+     -0.4,-0.6,-0.7,-0.1;  
+      0.8, 0,  -0.6,-0.6];      
+B = [0.8;0.1;1;-1];
+C = [1 2 -1 0];
+SYS=syslin(0.1,A,B,C);
+nsmp=100;
+U=prbs_a(nsmp,nsmp/5);
+Y=(flts(U,SYS)+0.3*rand(1,nsmp,'normal'));
+
+// Compute R
+S=15;
+[R,N1,SVAL] = findR(S,Y',U');
+N=3;
+SYS1 = findABCD(S,N,1,R) ;SYS1.dt=0.1;
+
+SYS1.X0 = inistate(SYS1,Y',U');
+expectedX0 = [0.180418869; 0.18003251391; -0.06993989023];
+assert_checkalmostequal(SYS1.X0, expectedX0, 1.e-8);
+
+