* Bug #14181 fixed - Calling intg (or integrate) in a function that is being integrat... 94/17494/2
Paul Bignier [Tue, 24 Nov 2015 11:09:59 +0000 (12:09 +0100)]
Change-Id: I6bb36e96191527e460ca5aa722e41bf9001c9b55

scilab/CHANGES_6.0.X
scilab/modules/differential_equations/includes/differentialequationfunctions.hxx
scilab/modules/differential_equations/src/cpp/differentialequationfunctions.cpp
scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.dia.ref [new file with mode: 0644]
scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.tst [new file with mode: 0644]

index 19f43f9..a4be33a 100644 (file)
@@ -15,6 +15,8 @@ For a high-level overview of the changes in this release, please consult the "Wh
 
 * Bug #13990 fixed - Windows installer did not ship all localization files.
 
+* Bug #14181 fixed - Calling intg (or integrate) in a function that is being integrated failed
+
 * Bug #14251 fixed - `spec` leaked some memory.
 
 * Bug #14253 fixed - Insertion in a struct contained in a list fixed.
index d347c6a..090311c 100644 (file)
@@ -13,7 +13,9 @@
 #ifndef __DIFFERENTIALEQUATIONS_HXX__
 #define __DIFFERENTIALEQUATIONS_HXX__
 
+#include <list>
 #include <map>
+
 #include "dynlib_differential_equations.h"
 #include "string.hxx"
 #include "callable.hxx"
@@ -309,7 +311,7 @@ class DIFFERENTIAL_EQUATIONS_IMPEXP DifferentialEquation
 {
     // differential equation functions
 private :
-    static DifferentialEquationFunctions* m_DifferentialEquationFunctions;
+    static std::list<DifferentialEquationFunctions*> m_DifferentialEquationFunctions;
 
 public :
     static void addDifferentialEquationFunctions(DifferentialEquationFunctions* _deFunction);
index 3794bb1..ee39190 100644 (file)
@@ -10,6 +10,8 @@
  *
  */
 /*--------------------------------------------------------------------------*/
+#include <list>
+
 #include "string.hxx"
 #include "double.hxx"
 #include "differentialequationfunctions.hxx"
@@ -33,22 +35,22 @@ extern "C"
 
 // need the current thread, not the last running thread.
 
-DifferentialEquationFunctions* DifferentialEquation::m_DifferentialEquationFunctions;
+std::list<DifferentialEquationFunctions*> DifferentialEquation::m_DifferentialEquationFunctions;
 
 using namespace types;
 void DifferentialEquation::addDifferentialEquationFunctions(DifferentialEquationFunctions* _deFunction)
 {
-    m_DifferentialEquationFunctions = _deFunction;
+    m_DifferentialEquationFunctions.push_back(_deFunction);
 }
 
 void DifferentialEquation::removeDifferentialEquationFunctions()
 {
-    m_DifferentialEquationFunctions = NULL;
+    m_DifferentialEquationFunctions.pop_back();
 }
 
 DifferentialEquationFunctions* DifferentialEquation::getDifferentialEquationFunctions()
 {
-    return m_DifferentialEquationFunctions;
+    return m_DifferentialEquationFunctions.back();
 }
 
 
diff --git a/scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.dia.ref b/scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.dia.ref
new file mode 100644 (file)
index 0000000..5dce7c9
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14181 -->
+//
+// <-- Bugzilla URL -->
+//http://bugzilla.scilab.org/show_bug.cgi?id=14181
+//
+// <-- Short Description -->
+// Calling intg (or integrate) in a function that is being integrated failed
+function y = f(x)
+    y = x.*integrate("x^2", "x", 0, 1)
+endfunction
+function z = g(x)
+    z = x.*integrate("f(x)", "x", 0, 1)
+endfunction
+x = 1:10;
+b = g(x);
+bRef = (0.5:0.5:5)/3;
+assert_checkalmostequal(b, bRef);
diff --git a/scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.tst b/scilab/modules/differential_equations/tests/nonreg_tests/bug_14181.tst
new file mode 100644 (file)
index 0000000..d947cc9
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14181 -->
+//
+// <-- Bugzilla URL -->
+//http://bugzilla.scilab.org/show_bug.cgi?id=14181
+//
+// <-- Short Description -->
+// Calling intg (or integrate) in a function that is being integrated failed
+
+function y = f(x)
+    y = x.*integrate("x^2", "x", 0, 1)
+endfunction
+function z = g(x)
+    z = x.*integrate("f(x)", "x", 0, 1)
+endfunction
+
+x = 1:10;
+b = g(x);
+bRef = (0.5:0.5:5)/3;
+
+assert_checkalmostequal(b, bRef);