* Bug #12118 fixed - ode() could take complex externals 85/12385/2
Paul BIGNIER [Thu, 29 Aug 2013 14:40:28 +0000 (16:40 +0200)]
Change-Id: I604f9c42baa73475e48392fae41ea2c45a2ba5c3

scilab/CHANGES_5.5.X
scilab/modules/differential_equations/sci_gateway/fortran/bydot.f
scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.dia.ref [new file with mode: 0644]
scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.tst [new file with mode: 0644]

index 8e3a26e..3300b85 100644 (file)
@@ -411,6 +411,8 @@ Bug fixes
 
 * Bug #12085 fixed - On Windows csvWrite wrote wrong EOL.
 
+* Bug #12118 fixed - ode() could take complex externals.
+
 * Bug #12143 fixed - "stop entity picker" (ged(11)) returned an error message.
 
 * Bug #12150 fixed - datatipCreate failed with one single point.
index fcf47fa..471616c 100644 (file)
@@ -119,6 +119,12 @@ c
       niv=niv-1
 c+    
 c     transfer of output parameters of external to fortran
+      isComplex = istk(iadr(lstk(top))+3)
+      if(isComplex.eq.1) then
+        buf='ode: external must be real.'
+        call error(9999)
+        return
+      endif
       call btof(ydot,n)
       if(err.gt.0.or.err1.gt.0) return
 c     normal return iero set to 0
@@ -136,4 +142,3 @@ c
       endif
       return
       end
-
diff --git a/scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.dia.ref b/scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.dia.ref
new file mode 100644 (file)
index 0000000..5cc30d8
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 12118 -->
+//
+// <-- Bugzilla URL -->
+//http://bugzilla.scilab.org/show_bug.cgi?id=12118
+//
+// <-- Short Description -->
+// ode() accepted complex internals
+function xdot = f(t, x)
+    xdot = %i;
+endfunction
+x0 = [1; 0];
+t0 = 0;
+t  = linspace(0, 10, 100);
+refMsg = msprintf(_("%s: external must be real.\n"), "ode");
+assert_checkerror("y = ode(zeros(1, 1), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 2), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 3), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 4), t0, t, f);", refMsg);
diff --git a/scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.tst b/scilab/modules/differential_equations/tests/nonreg_tests/bug_12118.tst
new file mode 100644 (file)
index 0000000..ae40cd0
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 12118 -->
+//
+// <-- Bugzilla URL -->
+//http://bugzilla.scilab.org/show_bug.cgi?id=12118
+//
+// <-- Short Description -->
+// ode() accepted complex internals
+
+function xdot = f(t, x)
+    xdot = %i;
+endfunction
+
+x0 = [1; 0];
+t0 = 0;
+t  = linspace(0, 10, 100);
+
+refMsg = msprintf(_("%s: external must be real.\n"), "ode");
+assert_checkerror("y = ode(zeros(1, 1), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 2), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 3), t0, t, f);", refMsg);
+assert_checkerror("y = ode(zeros(1, 4), t0, t, f);", refMsg);