Mercurial > hg > octave-nkf
annotate scripts/testfun/demo.m @ 15104:093961d9ebed gui
Fixed self-assignment bug found by Torsten.
* find-dialog.cc: Fixed self-assignment in constructor.
author | Jacob Dawid <jacob.dawid@gmail.com> |
---|---|
date | Sat, 04 Aug 2012 10:53:58 +0200 |
parents | dda73cb60ac5 |
children | bcace51598ed |
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} |
14359
7277fe922e99
doc: Use Octave preference for double quote in docstrings in scripts/
Rik <octave@nomad.inbox5.com>
parents:
14335
diff
changeset
|
22 ## @deftypefnx {Function File} {} demo ("@var{name}") |
7277fe922e99
doc: Use Octave preference for double quote in docstrings in scripts/
Rik <octave@nomad.inbox5.com>
parents:
14335
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 |
14335
ce2b59a6d0e5
maint: periodic merge of stable to default.
Rik <octave@nomad.inbox5.com>
diff
changeset
|
38 ## %! t = 0:0.01:2*pi; |
ce2b59a6d0e5
maint: periodic merge of stable to default.
Rik <octave@nomad.inbox5.com>
diff
changeset
|
39 ## %! x = sin (t); |
ce2b59a6d0e5
maint: periodic merge of stable to default.
Rik <octave@nomad.inbox5.com>
diff
changeset
|
40 ## %! plot (t, x); |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
41 ## %! %------------------------------------------------- |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
42 ## %! % 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
|
43 ## @end group |
5589 | 44 ## @end example |
45 ## | |
46 ## 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
|
47 ## 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
|
48 ## generally not necessary to use @code{disp} or @code{printf} within the demo. |
5589 | 49 ## |
50 ## 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
|
51 ## 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
|
52 ## 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
|
53 ## with the code |
5589 | 54 ## |
55 ## @example | |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
56 ## %! input("Press <enter> to continue: ","s"); |
5589 | 57 ## @end example |
58 ## | |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
59 ## @noindent |
5589 | 60 ## 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
|
61 ## 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
|
62 ## 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
|
63 ## to put multiple plots in the same window. |
5589 | 64 ## |
12643
55430618bd5f
Properly warn when demo or example called on a function without demos
Rik <octave@nomad.inbox5.com>
parents:
12505
diff
changeset
|
65 ## 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
|
66 ## 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
|
67 ## rather than just anonymous functions or inline functions, you will have to |
14868
5d3a684236b0
maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
68 ## use @code{eval (example ("function",n))} to see them. Because eval only |
5589 | 69 ## evaluates one line, or one statement if the statement crosses |
70 ## 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
|
71 ## with the 'if' on the same line as 'demo'. For example: |
5589 | 72 ## |
73 ## @example | |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
74 ## @group |
14327
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
75 ## %!demo if 1 |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
76 ## %! function y=f(x) |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
77 ## %! y=x; |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
78 ## %! endfunction |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
79 ## %! f(3) |
4d917a6a858b
doc: Use Octave coding conventions in @example blocks of docstrings.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
80 ## %! endif |
9051
1bf0ce0930be
Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
81 ## @end group |
5589 | 82 ## @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
|
83 ## |
5642 | 84 ## @seealso{test, example} |
5589 | 85 ## @end deftypefn |
86 | |
8202
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7540
diff
changeset
|
87 ## 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
|
88 ## 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
|
89 ## first subplot. |
5589 | 90 |
6494 | 91 function demo (name, n) |
5589 | 92 |
93 if (nargin < 1 || nargin > 2) | |
6046 | 94 print_usage (); |
5589 | 95 endif |
96 | |
97 if (nargin < 2) | |
98 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
|
99 elseif (ischar (n)) |
12505
6a1fe83fe129
Allow command forms of example and demo.
Ben Abbott <bpabbott@mac.com>
parents:
11587
diff
changeset
|
100 n = str2double (n); |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
13065
diff
changeset
|
101 endif |
5589 | 102 |
6494 | 103 [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
|
104 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
|
105 warning ("no demo available for %s", name); |
5589 | 106 return; |
6494 | 107 elseif (n >= length (idx)) |
108 warning ("only %d demos available for %s", length (idx) - 1, name); | |
5589 | 109 return; |
110 endif | |
111 | |
112 if (n > 0) | |
113 doidx = n; | |
114 else | |
14868
5d3a684236b0
maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
115 doidx = 1:(length (idx) - 1); |
5589 | 116 endif |
6494 | 117 for i = 1:length (doidx) |
5589 | 118 ## Pause between demos |
119 if (i > 1) | |
6494 | 120 input ("Press <enter> to continue: ", "s"); |
5589 | 121 endif |
122 | |
123 ## Process each demo without failing | |
124 try | |
6494 | 125 block = code(idx(doidx(i)):idx(doidx(i)+1)-1); |
15079
dda73cb60ac5
demo.m: Allow functions in demo blocks (bug #33981).
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
126 ## Use an environment without variables |
dda73cb60ac5
demo.m: Allow functions in demo blocks (bug #33981).
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
127 eval (cstrcat ("function __demo__ ()\n", block, "\nendfunction")); |
dda73cb60ac5
demo.m: Allow functions in demo blocks (bug #33981).
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
128 ## Display the code that will be executed before executing it |
dda73cb60ac5
demo.m: Allow functions in demo blocks (bug #33981).
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
129 printf ("%s example %d:%s\n\n", name, doidx(i), block); |
dda73cb60ac5
demo.m: Allow functions in demo blocks (bug #33981).
Rik <rik@octave.org>
parents:
14868
diff
changeset
|
130 __demo__; |
5589 | 131 catch |
132 ## Let the programmer know which demo failed. | |
12687
6d4c18565de1
Deprecate error_text(), __error_text__()
Rik <octave@nomad.inbox5.com>
parents:
12643
diff
changeset
|
133 printf ("%s example %d: failed\n%s\n", name, doidx(i), lasterr ()); |
5589 | 134 end_try_catch |
135 clear __demo__; | |
136 endfor | |
137 | |
138 endfunction | |
139 | |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
140 |
5589 | 141 %!demo |
14237
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
142 %! t = 0:0.01:2*pi; |
11949c9795a0
Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
143 %! x = sin (t); |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
144 %! plot (t, x); |
5589 | 145 %! %------------------------------------------------- |
146 %! % 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
|
147 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
148 %!error demo () |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
149 %!error demo (1, 2, 3) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
150 |