parameters: fixed bug #6774 47/347/3 70/370/1
Pierre MARECHAL [Mon, 3 May 2010 15:58:49 +0000 (17:58 +0200)]
Change-Id: Ied6cd58f32e12871531688fc1556fc0e65d30b67

Conflicts:

scilab/CHANGES_5.3.X

scilab/CHANGES_5.3.X
scilab/modules/parameters/macros/get_param.sci
scilab/modules/parameters/tests/nonreg_tests/bug_6774.dia.ref [new file with mode: 0644]
scilab/modules/parameters/tests/nonreg_tests/bug_6774.tst [new file with mode: 0644]
scilab/modules/parameters/tests/unit_tests/get_param.dia.ref
scilab/modules/parameters/tests/unit_tests/get_param.tst

index d8b3360..5442f10 100644 (file)
@@ -289,6 +289,9 @@ Bug fixes:
 
 * bug 6745 fixed - g_margin() returned an erroneous result.
 
+* bug 6774 fixed - Calling get_param generated a "funcprot" warning when  
+                   the value of an option which was a function.
+
 * bug 6784 fixed - It was not possible to move a Scilab installation without
                    breaking the (previously installed) ATOMS packages load.
 
@@ -327,5 +330,3 @@ Bug fixes:
 * bug 6990 fixed - "and" and "or" did not work on hypermatrices
 
 * bug 7014 fixed - ilib_verbose value was modified after toolbox_skeleton.
-
-
index ce5ea05..e068ef2 100644 (file)
@@ -1,5 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) DIGITEO - 2008-2010 - Yann COLLETTE
+// Copyright (C) 2008 - Yann COLLETTE <yann.collette@renault.com>
+// Copyright (C) 2009-2010 - DIGITEO - Yann COLLETTE
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -13,12 +15,26 @@ if ~isdef('param_default','local') then
   param_default = [];
 end
 
+if ( type(param_default) == 13 ) then
+  prot=funcprot()
+  funcprot(0);
+end
 result = param_default;
+if ( type(param_default) == 13 ) then
+  funcprot(prot);
+end
 
 if typeof(list_name)=='plist' then
   if is_param(list_name,param_name) then
+    if ( type(param_default) == 13 ) then
+      prot=funcprot()
+      funcprot(0);
+    end
     result = list_name(param_name);
-    if nargout==2 then 
+    if ( type(param_default) == 13 ) then
+      funcprot(prot);
+    end
+    if nargout==2 then
       err = %F; 
     end
   else
diff --git a/scilab/modules/parameters/tests/nonreg_tests/bug_6774.dia.ref b/scilab/modules/parameters/tests/nonreg_tests/bug_6774.dia.ref
new file mode 100644 (file)
index 0000000..fe56144
--- /dev/null
@@ -0,0 +1,37 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- JVM NOT MANDATORY -->
+// <-- Non-regression test for bug 6774 -->
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6774
+//
+// <-- Short Description -->
+//  Detailed description of the problem
+// The use of get_param requires to
+// be extra-careful when we get the value of an option which is a function.
+function y = rastrigin(x)
+  y = x(1)^2+x(2)^2-cos(12*x(1))-cos(18*x(2));
+endfunction
+function x_neigh = myneighfun (x_current, T,param)
+  sa_min_delta = -0.1*ones(size(x_current,1),size(x_current,2));
+  sa_max_delta = 0.1*ones(size(x_current,1),size(x_current,2));
+  x_neigh = x_current + (sa_max_delta - sa_min_delta).*rand(size(x_current,1),size(x_current,2)) + sa_min_delta;
+endfunction
+function T_init = myclientfunction ( x0, cit_f, proba_init, ItMX, param)
+  [neigh_func,err]  = get_param(param,"neigh_func",neigh_func_default);
+  [type_accept,err] = get_param(param,"type_accept","sa");
+  T_init = 0
+endfunction
+x0          = [2 2];
+Proba_start = 0.7;
+It_Pre      = 100;
+t_extern   = 100;
+t_intern   = 1000;
+params = init_param();
+params = add_param(params,"neigh_func", myneighfun);
+T0 = myclientfunction ( x0, rastrigin, Proba_start, It_Pre, params);
+// The test is : no warning must be generated.
diff --git a/scilab/modules/parameters/tests/nonreg_tests/bug_6774.tst b/scilab/modules/parameters/tests/nonreg_tests/bug_6774.tst
new file mode 100644 (file)
index 0000000..f85dd0f
--- /dev/null
@@ -0,0 +1,47 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- Non-regression test for bug 6774 -->
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6774
+//
+// <-- Short Description -->
+//  Detailed description of the problem
+// The use of get_param requires to
+// be extra-careful when we get the value of an option which is a function.
+
+
+function y = rastrigin(x)
+  y = x(1)^2+x(2)^2-cos(12*x(1))-cos(18*x(2));
+endfunction
+
+function x_neigh = myneighfun (x_current, T,param)
+  sa_min_delta = -0.1*ones(size(x_current,1),size(x_current,2));
+  sa_max_delta = 0.1*ones(size(x_current,1),size(x_current,2));
+  x_neigh = x_current + (sa_max_delta - sa_min_delta).*rand(size(x_current,1),size(x_current,2)) + sa_min_delta;
+endfunction
+
+function T_init = myclientfunction ( x0, cit_f, proba_init, ItMX, param)
+  [neigh_func,err]  = get_param(param,"neigh_func",neigh_func_default);
+  [type_accept,err] = get_param(param,"type_accept","sa");
+  T_init = 0
+endfunction
+
+x0          = [2 2];
+Proba_start = 0.7;
+It_Pre      = 100;
+t_extern   = 100;
+t_intern   = 1000;
+
+params = init_param();
+params = add_param(params,"neigh_func", myneighfun);
+T0 = myclientfunction ( x0, rastrigin, Proba_start, It_Pre, params);
+
+// The test is : no warning must be generated.
+
index 7286cf3..f1f494e 100644 (file)
@@ -1,11 +1,35 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - Yann COLLETTE <yann.collette@renault.com>
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+// <-- JVM_NOT_MANDATORY -->
 test_list = init_param();
-test_list = add_param(test_list,'test',%T);
-if get_param(test_list,'test')~=%T then bugmes();quit;end
+test_list = add_param(test_list,"test",%T);
+if get_param(test_list,"test")~=%T then bugmes();quit;end
+function y = rastrigin(x)
+  y = x(1)^2+x(2)^2-cos(12*x(1))-cos(18*x(2));
+endfunction
+function x_neigh = myneighfun (x_current, T,param)
+  sa_min_delta = -0.1*ones(size(x_current,1),size(x_current,2));
+  sa_max_delta = 0.1*ones(size(x_current,1),size(x_current,2));
+  x_neigh = x_current + (sa_max_delta - sa_min_delta).*rand(size(x_current,1),size(x_current,2)) + sa_min_delta;
+endfunction
+function T_init = myclientfunction ( x0, cit_f, proba_init, ItMX, param)
+  [neigh_func,err]  = get_param(param,"neigh_func",neigh_func_default);
+  [type_accept,err] = get_param(param,"type_accept","sa");
+  T_init = 0
+endfunction
+x0          = [2 2];
+Proba_start = 0.7;
+It_Pre      = 100;
+t_extern   = 100;
+t_intern   = 1000;
+params = init_param();
+params = add_param(params,"neigh_func", myneighfun);
+T0 = myclientfunction ( x0, rastrigin, Proba_start, It_Pre, params);
+// The test is : no warning must be generated.
index 95d20ad..7a7ec2e 100755 (executable)
@@ -1,6 +1,7 @@
 
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - Yann COLLETTE <yann.collette@renault.com>
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 
 test_list = init_param();
 
-test_list = add_param(test_list,'test',%T);
+test_list = add_param(test_list,"test",%T);
+
+if get_param(test_list,"test")~=%T then pause,end
+
+function y = rastrigin(x)
+  y = x(1)^2+x(2)^2-cos(12*x(1))-cos(18*x(2));
+endfunction
+
+function x_neigh = myneighfun (x_current, T,param)
+  sa_min_delta = -0.1*ones(size(x_current,1),size(x_current,2));
+  sa_max_delta = 0.1*ones(size(x_current,1),size(x_current,2));
+  x_neigh = x_current + (sa_max_delta - sa_min_delta).*rand(size(x_current,1),size(x_current,2)) + sa_min_delta;
+endfunction
+
+function T_init = myclientfunction ( x0, cit_f, proba_init, ItMX, param)
+  [neigh_func,err]  = get_param(param,"neigh_func",neigh_func_default);
+  [type_accept,err] = get_param(param,"type_accept","sa");
+  T_init = 0
+endfunction
+
+x0          = [2 2];
+Proba_start = 0.7;
+It_Pre      = 100;
+t_extern   = 100;
+t_intern   = 1000;
+
+params = init_param();
+params = add_param(params,"neigh_func", myneighfun);
+T0 = myclientfunction ( x0, rastrigin, Proba_start, It_Pre, params);
+
+// The test is : no warning must be generated.
 
-if get_param(test_list,'test')~=%T then pause,end