diff scripts/statistics/base/var.m @ 21309:7fbecef105ca

Allow statistics functions to work over non-existent dimension (bug #33523). * var.m, center.m, kurtosis.m, mean.m, meansq.m, median.m, moment.m, skewness.m, std.m: Remove check for input dimension being within the range of ndims (x). Add BIST tests for new behavior and update input validation tests.
author Rik <rik@octave.org>
date Fri, 19 Feb 2016 21:27:03 -0800
parents 516bb87ea72e
children bac0d6f07a3e
line wrap: on
line diff
--- a/scripts/statistics/base/var.m	Fri Feb 19 09:40:59 2016 -0800
+++ b/scripts/statistics/base/var.m	Fri Feb 19 21:27:03 2016 -0800
@@ -75,8 +75,7 @@
 
   if (isempty (opt))
     opt = 0;
-  endif
-  if (opt != 0 && opt != 1)
+  elseif (opt != 0 && opt != 1)
     error ("var: normalization OPT must be 0 or 1");
   endif
 
@@ -86,13 +85,12 @@
     ## Find the first non-singleton dimension.
     (dim = find (sz > 1, 1)) || (dim = 1);
   else
-    if (!(isscalar (dim) && dim == fix (dim))
-        || !(1 <= dim && dim <= nd))
+    if (! (isscalar (dim) && dim == fix (dim) && dim > 0))
       error ("var: DIM must be an integer and a valid dimension");
     endif
   endif
 
-  n = sz(dim);
+  n = size (x, dim);
   if (n == 1)
     if (isa (x, "single"))
       retval = zeros (sz, "single");
@@ -113,11 +111,17 @@
 %!assert (var ([1,2,3]), 1)
 %!assert (var ([1,2,3], 1), 2/3, eps)
 %!assert (var ([1,2,3], [], 1), [0,0,0])
+%!assert (var ([1,2,3], [], 3), [0,0,0])
 
 ## Test input validation
 %!error var ()
 %!error var (1,2,3,4)
-%!error var (['A'; 'B'])
-%!error var (1, -1)
-%!error var ([], 1)
+%!error <X must be a numeric> var (['A'; 'B'])
+%!error <OPT must be 0 or 1> var (1, -1)
+%!error <FLAG must be 0 or 1> skewness (1, 2)
+%!error <FLAG must be 0 or 1> skewness (1, [1 0])
+%!error <DIM must be an integer> var (1, [], ones (2,2))
+%!error <DIM must be an integer> var (1, [], 1.5)
+%!error <DIM must be .* a valid dimension> var (1, [], 0)
+%!error <X must not be empty> var ([], 1)