Bug #12913 fixed - linspace errored out if third argument was integer type 89/12589/4
Paul BIGNIER [Wed, 18 Sep 2013 15:30:40 +0000 (17:30 +0200)]
Allow integer type as first argument of linspace and turn warning into error.

Change-Id: Iacd0d3375cbd7d40600f48752389cf41d26753f9

scilab/CHANGES_5.5.X
scilab/modules/elementary_functions/macros/linspace.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.tst [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_3314.dia.ref
scilab/modules/elementary_functions/tests/nonreg_tests/bug_3314.tst

index 879b33a..906668c 100644 (file)
@@ -724,6 +724,8 @@ Bug Fixes
 
 * Bug #12911 fixed - Matlab to Scilab dictionary help page updated for eig.
 
+* Bug #12913 fixed - linspace returned an error if third argument was an integer type variable.
+
 * Bug #12916 fixed - power help page improved.
 
 * Bug #12927 fixed - ones function could not take integer type input.
index e2863d1..113645d 100644 (file)
@@ -29,15 +29,15 @@ function y = linspace(d1, d2, n)
     if rhs == 2 then
         n = 100;
     else
-        if type(n)<>1 | size(n,"*")<>1 then
+        if and(type(n)<>[1 8])  | size(n,"*")<>1 then
             error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"),"linspace",3));
         end
 
-        if int(n) <> n then
-            warning(msprintf("%s: Using a non integer value for input argument #%d is deprecated and will produce an error in version 5.4.1.\n","linspace",3));
-            n = int(n);
+        if type(n) == 1 & int(n) <> n then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: An integer value expected.\n"),"linspace",3));
+        elseif type(n) == 8 then
+            n = double(n); // Convert for the operations to come
         end
-
     end
 
     if (n - 1) <= 0 then
@@ -49,4 +49,3 @@ function y = linspace(d1, d2, n)
         y(:,$) = d2;
     end
 endfunction
-
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.dia.ref
new file mode 100644 (file)
index 0000000..358afc6
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 12913 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12913
+//
+// <-- Short Description -->
+// linspace errored out if third argument was integer type
+y = linspace(0, 5.5, uint32(5.2));
+refY = [0 1.375 2.75 4.125 5.5];
+assert_checkequal(y, refY);
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: An integer value expected.\n"), "linspace", 3);
+assert_checkerror("linspace(0, 5.5, 5.2);", refMsg);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.tst
new file mode 100644 (file)
index 0000000..a65d749
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 12913 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12913
+//
+// <-- Short Description -->
+// linspace errored out if third argument was integer type
+
+y = linspace(0, 5.5, uint32(5.2));
+refY = [0 1.375 2.75 4.125 5.5];
+assert_checkequal(y, refY);
+
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: An integer value expected.\n"), "linspace", 3);
+assert_checkerror("linspace(0, 5.5, 5.2);", refMsg);
index e65f5c7..45ee385 100644 (file)
 //
 // <-- Short Description -->
 // linspace(0,1,(1-0.9)*22050) crashes. (Scilab 4.1.2 on linux Ubuntu 8.04)
+// Test updated for Scilab 5.5.0: using non-integer values for third input argument now returns an error.
 ierr = execstr('linspace(0,1,(1-0.9)*22050);','errcatch');
-WARNING: linspace: Using a non integer value for input argument #3 is deprecated and will produce an error in version 5.4.1.
-if ierr <> 0 then bugmes();quit;end
+if ierr == 0 then bugmes();quit;end
 a = (1-0.9)*22050;
 ierr = execstr('linspace(0,1,a);','errcatch');
-WARNING: linspace: Using a non integer value for input argument #3 is deprecated and will produce an error in version 5.4.1.
-if ierr <> 0 then bugmes();quit;end
+if ierr == 0 then bugmes();quit;end
index 6fd96d6..f781f11 100644 (file)
 
 // linspace(0,1,(1-0.9)*22050) crashes. (Scilab 4.1.2 on linux Ubuntu 8.04)
 
-ierr = execstr('linspace(0,1,(1-0.9)*22050);','errcatch');
-if ierr <> 0 then pause,end
+// Test updated for Scilab 5.5.0: using non-integer values for third input argument now returns an error.
+
+ierr = execstr("linspace(0,1,(1-0.9)*22050);","errcatch");
+if ierr == 0 then pause,end
 
 a = (1-0.9)*22050;
-ierr = execstr('linspace(0,1,a);','errcatch');
-if ierr <> 0 then pause,end
+ierr = execstr("linspace(0,1,a);","errcatch");
+if ierr == 0 then pause,end