* Bug #8337 fixed - Compatibility_functions: force mtlb_rand to use 'uniform' rule 00/12900/2
Paul BIGNIER [Fri, 11 Oct 2013 12:40:12 +0000 (14:40 +0200)]
mtlb_rand was affected by the random rule.

For example, it used the 'normal' rule if rand("normal") had been set.

Change-Id: I5b3976324065b38255c41ec6a6f82c5c065717c0

scilab/CHANGES_5.5.X
scilab/modules/compatibility_functions/macros/mtlb_rand.sci
scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.dia.ref [new file with mode: 0644]
scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.tst [new file with mode: 0644]

index ee3b814..c1a96ac 100644 (file)
@@ -11,6 +11,8 @@ Scilab Bug Fixes
 
 * Bug #8031 fixed - cdfgam error message fixed.
 
+* Bug #8337 fixed - mtlb_rand now uses the "uniform" rule, whatever the random rule set is.
+
 * Bug #11571 fixed - x_mdialog did not let the Look&Feel select the window size.
 
 * Bug #11680 fixed - GUI functions in Scilab 5.4.X were much slower than in Scilab 5.3.3.
index 47237eb..1b42196 100644 (file)
@@ -7,16 +7,25 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function r=mtlb_rand(a)
+function r = mtlb_rand(a)
     // Emulation function for rand() Matlab function
 
+    // Save current mode for random generator
+    randType = rand("info");
+    // Switch to uniform distribution
+    rand("uniform");
+
     if and(size(a)==[1 1]) then
-        r=rand(a,a)
+        r = rand(a, a)
     else
-        tmp=list()
+        tmp = list()
         for k=1:size(a,"*")
-            tmp(k)=a(k)
+            tmp(k) = a(k)
         end
-        r=rand(tmp(1:$))
+        r = rand(tmp(1:$))
     end
+
+    // Restore rand mode
+    rand(randType);
+
 endfunction
diff --git a/scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.dia.ref b/scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.dia.ref
new file mode 100644 (file)
index 0000000..5d96d45
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// 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.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 8337 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8337
+//
+// <-- Short Description -->
+// mtlb_rand() was affected by the seed of rand(), whereas it follow the uniform rule,
+// as long as we don't have the 'rng' Matlab function to control the generation of random numbers.
+rand("normal");
+a = mtlb_rand(1000);
+assert_checktrue(and(a>=0 & a<=1));
+assert_checkequal(rand("info"), "normal");
diff --git a/scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.tst b/scilab/modules/compatibility_functions/tests/nonreg_tests/bug_8337.tst
new file mode 100644 (file)
index 0000000..e6f3293
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// 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.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 8337 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8337
+//
+// <-- Short Description -->
+// mtlb_rand() was affected by the seed of rand(), whereas it follow the uniform rule,
+// as long as we don't have the 'rng' Matlab function to control the generation of random numbers.
+
+rand("normal");
+a = mtlb_rand(1000);
+
+assert_checktrue(and(a>=0 & a<=1));
+assert_checkequal(rand("info"), "normal");