changeset 2066:07295c2eb4d0 octave-forge

Fix docs to reflect correct range; fix tests to check correct range; add support for negative scalar range returning values between [m+1,0]
author pkienzle
date Wed, 12 Oct 2005 03:01:22 +0000
parents 54d8a0823ae8
children 2b572b0b5127
files main/comm/randint.m
diffstat 1 files changed, 14 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/main/comm/randint.m	Mon Oct 10 07:14:13 2005 +0000
+++ b/main/comm/randint.m	Wed Oct 12 03:01:22 2005 +0000
@@ -25,9 +25,10 @@
 ##
 ## The range in which the integers are generated will is determined by
 ## the variable @var{range}. If @var{range} is an integer, the value will
-## lie in the range [0,@var{range}]. If @var{range} contains two elements
-## the intgers will lie between these two elements. By default @var{range}
-## is assumed to be [0:1].
+## lie in the range [0,@var{range}-1], or [@var{range}+1,0] if @var{range}
+## is negative. If @var{range} contains two elements the intgers will lie 
+## within these two elements, inclusive. By default @var{range} is 
+## assumed to be [0:1].
 ##
 ## The variable @var{seed} allows the random number generator to be seeded
 ## with a fixed value. The initial seed will be restored when returning.
@@ -55,7 +56,11 @@
 
   ## Check range
   if (length (range) == 1)
-    range = [0, range-1];
+    if (range < 0)
+      range = [range+1, 0];
+    else
+      range = [0, range-1];
+    endif
   elseif ( prod (size (range)) != 2)
     error ("randint: range must be a 2 element vector");
   endif
@@ -86,6 +91,10 @@
 %!assert (size(a1) == [n, n] && size(a2) == [n, n]);
 %!assert (max ([a1(:); a2(:)]) <= 1 && min([a1(:); a2(:)]) >= 0);
 %!assert (size(a3) == [n, n] && size(a4) == [n, n]);
-%!assert (max (a3(:)) <= m && min(a3(:)) >= 0);
+%!assert (max (a3(:)) < m && min(a3(:)) >= 0);
 %!assert (max (a4(:)) <= m && min(a4(:)) >= -m);
 %!assert (a5(:) == a6(:));
+
+%!test
+%! a = randint(10,10,-32);
+%! assert (max(a(:)) <= 0 && min(a(:)) > -32);