Mercurial > hg > octave-nkf
annotate scripts/testfun/demo.m @ 14327:4d917a6a858b stable
doc: Use Octave coding conventions in @example blocks of docstrings.
* accumarray.m, accumdim.m, bar.m, base2dec.m, bincoeff.m, bitcmp.m, bitset.m,
celldisp.m, chop.m, clabel.m, cloglog.m, colon.m, compass.m, computer.m,
contour3.m, contourc.m, corr.m, cstrcat.m, ctime.m, cylinder.m, date.m,
dec2base.m, demo.m, dir.m, dlmwrite.m, expm.m, ezcontourf.m, ezcontour.m,
ezmeshc.m, ezmesh.m, ezplot.m, ezsurfc.m, ezsurf.m, feather.m, findobj.m,
flipdim.m, fplot.m, genvarname.m, getfield.m, hankel.m, hilb.m, hist.m,
idivide.m, index.m, int2str.m, interp1.m, is_leap_year.m, ismember.m,
isocolors.m, isonormals.m, isosurface.m, kurtosis.m, legendre.m, linkprop.m,
logit.m, logm.m, __makeinfo__.m, __marching_cube__.m, median.m, mkoctfile.m,
moment.m, mpoles.m, orderfields.m, pcg.m, pcr.m, plot3.m, plotmatrix.m,
polyaffine.m, polygcd.m, poly.m, polyout.m, print.m, qp.m, quadgk.m, qzhess.m,
randi.m, rat.m, refreshdata.m, residue.m, rose.m, rot90.m, saveas.m, saveobj.m,
shiftdim.m, skewness.m, spaugment.m, spdiags.m, sqp.m, stem.m, str2num.m,
strcat.m, strjust.m, strread.m, strsplit.m, structfun.m, subplot.m,
subsindex.m, substruct.m, surfl.m, surfnorm.m, svds.m, uimenu.m, union.m,
voronoi.m, warning_ids.m, wblpdf.m: Use Octave coding conventions in
@example blocks of docstrings.
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Sat, 04 Feb 2012 22:12:50 -0800 |
parents | 72c96de7a403 |
children | ce2b59a6d0e5 |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14066
diff
changeset
|
1 ## Copyright (C) 2000-2012 Paul Kienzle |
5589 | 2 ## |
7016 | 3 ## This file is part of Octave. |
5589 | 4 ## |
7016 | 5 ## Octave is free software; you can redistribute it and/or modify it |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
5589 | 14 ## |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
5589 | 18 |
19 ## -*- texinfo -*- | |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
20 ## @deftypefn {Command} {} demo @var{name} |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
21 ## @deftypefnx {Command} {} demo @var{name} @var{n} |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
22 ## @deftypefnx {Function File} {} demo ('@var{name}') |
12505
6a1fe83fe129
Allow command forms of example and demo.
Ben Abbott <bpabbott@mac.com>
parents:
11587
diff
changeset
|
23 ## @deftypefnx {Function File} {} demo ('@var{name}', @var{n}) |
5589 | 24 ## |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
25 ## Run example code block @var{n} associated with the function @var{name}. |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
26 ## If @var{n} is not specified, all examples are run. |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
27 ## |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11563
diff
changeset
|
28 ## Examples are stored in the script file, or in a file with the same |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
29 ## name but no extension located on Octave's load path. To keep examples |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
30 ## separate from regular script code, all lines are prefixed by @code{%!}. Each |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
31 ## example must also be introduced by the keyword 'demo' flush left to the |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
32 ## prefix with no intervening spaces. The remainder of the example can |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
33 ## contain arbitrary Octave code. For example: |
5589 | 34 ## |
35 ## @example | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
36 ## @group |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
37 ## %!demo |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
38 ## %! t=0:0.01:2*pi; x = sin (t); |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
39 ## %! plot (t,x) |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
40 ## %! %------------------------------------------------- |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
41 ## %! % the figure window shows one cycle of a sine wave |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
42 ## @end group |
5589 | 43 ## @end example |
44 ## | |
45 ## Note that the code is displayed before it is executed, so a simple | |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
46 ## comment at the end suffices for labeling what is being shown. It is |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
47 ## generally not necessary to use @code{disp} or @code{printf} within the demo. |
5589 | 48 ## |
49 ## Demos are run in a function environment with no access to external | |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
50 ## variables. This means that every demo must have separate initialization |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
51 ## code. Alternatively, all demos can be combined into a single large demo |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
52 ## with the code |
5589 | 53 ## |
54 ## @example | |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
55 ## %! input("Press <enter> to continue: ","s"); |
5589 | 56 ## @end example |
57 ## | |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
58 ## @noindent |
5589 | 59 ## between the sections, but this is discouraged. Other techniques |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
60 ## to avoid multiple initialization blocks include using multiple plots |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
61 ## with a new @code{figure} command between each plot, or using @code{subplot} |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
62 ## to put multiple plots in the same window. |
5589 | 63 ## |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
64 ## Also, because demo evaluates within a function context, you cannot |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
65 ## define new functions inside a demo. If you must have function blocks, |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
66 ## rather than just anonymous functions or inline functions, you will have to |
5589 | 67 ## use @code{eval(example('function',n))} to see them. Because eval only |
68 ## evaluates one line, or one statement if the statement crosses | |
69 ## multiple lines, you must wrap your demo in "if 1 <demo stuff> endif" | |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
9051
diff
changeset
|
70 ## with the 'if' on the same line as 'demo'. For example: |
5589 | 71 ## |
72 ## @example | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
73 ## @group |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
74 ## %!demo if 1 |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
75 ## %! function y=f(x) |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
76 ## %! y=x; |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
77 ## %! endfunction |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
78 ## %! f(3) |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
79 ## %! endif |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
80 ## @end group |
5589 | 81 ## @end example |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
82 ## |
5642 | 83 ## @seealso{test, example} |
5589 | 84 ## @end deftypefn |
85 | |
8202
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7540
diff
changeset
|
86 ## FIXME: modify subplot so that gnuplot_has_multiplot == 0 causes it to |
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7540
diff
changeset
|
87 ## use the current figure window but pause if not plotting in the |
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7540
diff
changeset
|
88 ## first subplot. |
5589 | 89 |
6494 | 90 function demo (name, n) |
5589 | 91 |
92 if (nargin < 1 || nargin > 2) | |
6046 | 93 print_usage (); |
5589 | 94 endif |
95 | |
96 if (nargin < 2) | |
97 n = 0; | |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
98 elseif (ischar (n)) |
12505
6a1fe83fe129
Allow command forms of example and demo.
Ben Abbott <bpabbott@mac.com>
parents:
11587
diff
changeset
|
99 n = str2double (n); |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
13065
diff
changeset
|
100 endif |
5589 | 101 |
6494 | 102 [code, idx] = test (name, "grabdemo"); |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
103 if (isempty (idx)) |
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
104 warning ("no demo available for %s", name); |
5589 | 105 return; |
6494 | 106 elseif (n >= length (idx)) |
107 warning ("only %d demos available for %s", length (idx) - 1, name); | |
5589 | 108 return; |
109 endif | |
110 | |
111 if (n > 0) | |
112 doidx = n; | |
113 else | |
6494 | 114 doidx = 1:length(idx)-1; |
5589 | 115 endif |
6494 | 116 for i = 1:length (doidx) |
5589 | 117 ## Pause between demos |
118 if (i > 1) | |
6494 | 119 input ("Press <enter> to continue: ", "s"); |
5589 | 120 endif |
121 | |
122 ## Process each demo without failing | |
123 try | |
6494 | 124 block = code(idx(doidx(i)):idx(doidx(i)+1)-1); |
14066
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
125 ## FIXME: need to check for embedded test functions, which cause |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
126 ## segfaults, until issues with subfunctions in functions are resolved. |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
127 embed_func = regexp (block, '^\s*function ', 'once', 'lineanchors'); |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
128 if (isempty (embed_func)) |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
129 ## Use an environment without variables |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
130 eval (cstrcat ("function __demo__()\n", block, "\nendfunction")); |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
131 ## Display the code that will be executed before executing it |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
132 printf ("%s example %d:%s\n\n", name, doidx(i), block); |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
133 __demo__; |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
134 else |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
135 error (["Functions embedded in %!demo blocks are not allowed.\n", ... |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
136 "Use the %!function/%!endfunction syntax instead to define shared functions for testing.\n"]); |
80bda7c4f012
Avoid segfault in test() and demo() blocks with embedded functions (Bugs #35068, #32843, #33981)
Rik <octave@nomad.inbox5.com>
parents:
13141
diff
changeset
|
137 endif |
5589 | 138 catch |
139 ## Let the programmer know which demo failed. | |
12687
6d4c18565de1
Deprecate error_text(), __error_text__()
Rik <octave@nomad.inbox5.com>
parents:
12643
diff
changeset
|
140 printf ("%s example %d: failed\n%s\n", name, doidx(i), lasterr ()); |
5589 | 141 end_try_catch |
142 clear __demo__; | |
143 endfor | |
144 | |
145 endfunction | |
146 | |
147 %!demo | |
148 %! t=0:0.01:2*pi; x = sin(t); | |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
149 %! plot (t,x) |
5589 | 150 %! %------------------------------------------------- |
151 %! % the figure window shows one cycle of a sine wave | |
13065
1ca3cde15b18
codepsprint: tests for testfun functions
John W. Eaton <jwe@octave.org>
parents:
12687
diff
changeset
|
152 |
1ca3cde15b18
codepsprint: tests for testfun functions
John W. Eaton <jwe@octave.org>
parents:
12687
diff
changeset
|
153 %!error demo (); |
1ca3cde15b18
codepsprint: tests for testfun functions
John W. Eaton <jwe@octave.org>
parents:
12687
diff
changeset
|
154 %!error demo (1, 2, 3); |