changeset 19058:26a770330953

example.m: Add better input validation and %!error tests for that. * example.m: Add better input validation and %!error tests for that.
author Rik <rik@octave.org>
date Mon, 18 Aug 2014 09:06:08 -0700
parents ffba4ffa1f85
children f27140dd13a6
files scripts/testfun/example.m
diffstat 1 files changed, 27 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/testfun/example.m	Sun Aug 17 11:43:12 2014 -0700
+++ b/scripts/testfun/example.m	Mon Aug 18 09:06:08 2014 -0700
@@ -45,7 +45,24 @@
     n = str2double (n);
   endif
 
+  if (! (isreal (n) && isscalar (n) && n == fix (n)))
+    error ("example: N must be a scalar integer");
+  endif
+
   [code, idx] = test (name, "grabdemo");
+
+  if (idx == -1)
+    warning ("example: no function %s found", name);
+    return;
+  elseif (isempty (idx))
+    warning ("example: no example available for %s", name);
+    return;
+  elseif (n >= length (idx))
+    warning ("example: only %d examples available for %s",
+             length (idx) - 1, name);
+    return;
+  endif
+
   if (nargout > 0)
     if (n > 0)
       if (n <= length (idx))
@@ -65,13 +82,6 @@
     else
       doidx = 1:length (idx) - 1;
     endif
-    if (isempty (idx))
-      warning ("no example available for %s", name);
-      return;
-    elseif (n >= length (idx))
-      warning ("only %d examples available for %s", length (idx) - 1, name);
-      return;
-    endif
 
     for i = 1:length (doidx)
       block = code(idx(doidx(i)):idx(doidx(i)+1)-1);
@@ -88,17 +98,24 @@
 
 %!demo
 %! clf;
-%! t = 0:0.01:2*pi;  x = sin (t);
+%! t = 0:0.01:2*pi;
+%! x = sin (t);
 %! plot (t,x)
 
 %!assert (example ("example", 1), "\n example (\"example\");");
+
 %!test
 %! [code, idx] = example ("example");
 %! assert (code, ...
-%!         "\n example (\"example\");\n clf;\n t = 0:0.01:2*pi;  x = sin (t);\n plot (t,x)");
+%!         "\n example (\"example\");\n clf;\n t = 0:0.01:2*pi;\n x = sin (t);\n plot (t,x)");
 %! assert (idx, [1, 23, 73]);
 
 %% Test input validation
-%!error example
+%!error example ()
 %!error example ("example", 3, 5)
+%!error <N must be a scalar integer> example ("example", {1})
+%!error <N must be a scalar integer> example ("example", ones (2,2))
+%!error <N must be a scalar integer> example ("example", 1.5)
+%!warning <no function .* found> example ("_%NOT_A_FUNCTION%_");
+%!warning <only 2 examples available for example> example ("example", 10);