* Bug #13381 fixed - eigs was failing due to typo in varargin. 99/14499/3
Pierre-Aime Agnel [Mon, 5 May 2014 10:09:23 +0000 (12:09 +0200)]
Change-Id: I78677661353144aec06710242f01d8a489d54508

scilab/CHANGES_5.5.X
scilab/modules/arnoldi/macros/eigs.sci
scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.dia.ref [new file with mode: 0644]
scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.tst [new file with mode: 0644]

index ea80bbd..f849399 100644 (file)
@@ -14,6 +14,8 @@ Scilab Bug Fixes
 
 * Bug #13378 fixed - The "Console" handle display was not homogeneous with others.
 
+* Bug #13381 fixed - eigs was failing when using a function as first input argument.
+
 * Bug #13383 fixed - newaxes help page did not mention the call with a graphic
                      handle as input.
 
index 978f28b..d9436e1 100644 (file)
@@ -136,11 +136,11 @@ function [d, v] = eigs(varargin)
             B = varargin(3);
 
         case 4
-            B = varagin(3);
+            B = varargin(3);
             nev = varargin(4);
 
         case 5
-            B = varagin(3);
+            B = varargin(3);
             nev = varargin(4);
             sigma = varargin(5);
 
@@ -692,8 +692,8 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
     //*************************
     //NEV :
     //*************************
-    //verification du type de nev
-    //check if nev is complex?
+    // type of nev check
+    // check if nev is complex?
     if(typeof(nev) <> "constant") | (~isreal(nev)) | (size(nev,"*") <> 1)
         error(msprintf(gettext("%s: Wrong type for input argument #%d: A scalar expected.\n"), "eigs", 3));
     end
@@ -836,7 +836,7 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
     end
 
     if(a_real & Breal)
-        //resid complexe ?
+        //resid complex ?
         if(~isreal(resid))
             error(msprintf(gettext("%s: Wrong type for input argument #%d: Start vector opts.resid must be real for real problems.\n"), "eigs", 10));
         end
@@ -1089,7 +1089,9 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
                     index = find(di~=0);
                     index = index(1:2:$);
                     res_v = z;
-                    res_v(:,[index index+1]) = [complex(res_v(:,index), res_v(:,index+1)), complex(res_v(:,index), -res_v(:,index+1))];
+                    if ~isempty(index) then
+                        res_v(:,[index index+1]) = [complex(res_v(:,index), res_v(:,index+1)), complex(res_v(:,index), -res_v(:,index+1))];
+                    end
                     res_d = diag(res_d);
                     res_v = res_v(:,1:nev);
                 end
diff --git a/scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.dia.ref b/scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.dia.ref
new file mode 100644 (file)
index 0000000..6552dfb
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug  -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13381
+//
+// <-- Short Description -->
+// eigs failed due to a typo on varargin
+//
+// <-- CLI SHELL MODE -->
+function y = f(x)
+    A = diag(-10:10);
+    y = A*x;
+endfunction
+[d, v] = eigs(f, 21, eye(21, 21), 7);
+d2 = eigs(f, 21, eye(21, 21), 7);
+assert_checkfalse(isempty(v));
diff --git a/scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.tst b/scilab/modules/arnoldi/tests/nonreg_tests/bug_13381.tst
new file mode 100644 (file)
index 0000000..6ff2f22
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug  -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13381
+//
+// <-- Short Description -->
+// eigs failed due to a typo on varargin
+//
+// <-- CLI SHELL MODE -->
+
+function y = f(x)
+    A = diag(-10:10);
+    y = A*x;
+endfunction
+
+[d, v] = eigs(f, 21, eye(21, 21), 7);
+d2 = eigs(f, 21, eye(21, 21), 7);
+
+assert_checkfalse(isempty(v));