Mercurial > hg > octave-lyh
annotate scripts/testfun/assert.m @ 8325:b93ac0586e4b
spelling corrections
Here is a patch with some spelling corrections to the manual.
changeset: 8308:aeaf884ea9af
user: Brian Gough <bjg@gnu.org>
date: Fri Nov 07 09:26:17 2008 -0500
summary: [docs] assoicated => associated
author | Brian Gough<bjg@network-theory.co.uk> |
---|---|
date | Mon, 17 Nov 2008 11:38:39 +0100 |
parents | cf59d542f33e |
children | bc982528de11 |
rev | line source |
---|---|
7017 | 1 ## Copyright (C) 2000, 2006, 2007 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 -*- | |
20 ## @deftypefn {Function File} {} assert (@var{cond}) | |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
21 ## @deftypefnx {Function File} {} assert (@var{cond}, @var{errmsg}, @dots{}) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
22 ## @deftypefnx {Function File} {} assert (@var{cond}, @{var{msg_id}, @var{errmsg}, @dots{}) |
5589 | 23 ## @deftypefnx {Function File} {} assert (@var{observed},@var{expected}) |
24 ## @deftypefnx {Function File} {} assert (@var{observed},@var{expected},@var{tol}) | |
25 ## | |
26 ## Produces an error if the condition is not met. @code{assert} can be | |
27 ## called in three different ways. | |
28 ## | |
29 ## @table @code | |
30 ## @item assert (@var{cond}) | |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
31 ## @itemx assert (@var{cond}, @var{errmsg}, @dots{}) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
32 ## @itemx assert (@var{cond}, @var{msg_id}, @var{errmsg}, @dots{}) |
5589 | 33 ## Called with a single argument @var{cond}, @code{assert} produces an |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
34 ## error if @var{cond} is zero. If called with a single argument a |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
35 ## generic error message. With more than one argument, the additional |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
36 ## arguments are passed to the @code{error} function. |
5589 | 37 ## |
38 ## @item assert (@var{observed}, @var{expected}) | |
39 ## Produce an error if observed is not the same as expected. Note that | |
40 ## observed and expected can be strings, scalars, vectors, matrices, | |
41 ## lists or structures. | |
42 ## | |
43 ## @item assert(@var{observed}, @var{expected}, @var{tol}) | |
7027 | 44 ## Accept a tolerance when comparing numbers. |
8325
b93ac0586e4b
spelling corrections
Brian Gough<bjg@network-theory.co.uk>
parents:
8202
diff
changeset
|
45 ## If @var{tol} is positive use it as an absolute tolerance, will produce an error if |
7027 | 46 ## @code{abs(@var{observed} - @var{expected}) > abs(@var{tol})}. |
47 ## If @var{tol} is negative use it as a relative tolerance, will produce an error if | |
48 ## @code{abs(@var{observed} - @var{expected}) > abs(@var{tol} * @var{expected})}. | |
49 ## If @var{expected} is zero @var{tol} will always be used as an absolute tolerance. | |
5589 | 50 ## @end table |
5642 | 51 ## @seealso{test} |
5589 | 52 ## @end deftypefn |
53 | |
8202
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7770
diff
changeset
|
54 ## FIXME: Output throttling: don't print out the entire 100x100 matrix, |
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7770
diff
changeset
|
55 ## but instead give a summary; don't print out the whole list, just |
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7770
diff
changeset
|
56 ## say what the first different element is, etc. To do this, make |
cf59d542f33e
replace all TODOs and XXXs with FIXMEs
Jaroslav Hajek <highegg@gmail.com>
parents:
7770
diff
changeset
|
57 ## the message generation type specific. |
6494 | 58 |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
59 function assert (cond, varargin) |
6494 | 60 |
61 in = deblank (argn(1,:)); | |
62 for i = 2:rows (argn) | |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7151
diff
changeset
|
63 in = cstrcat (in, ",", deblank (argn(i,:))); |
7151 | 64 endfor |
7540
3422f39573b1
strcat.m: Matlab compatibility, with cstrcat.m replacing conventional strcat.m.
Ben Abbott <bpabbott@mac.com>
parents:
7151
diff
changeset
|
65 in = cstrcat ("(", in, ")"); |
5589 | 66 |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
67 if (nargin == 1 || (nargin > 1 && islogical (cond) && ischar (varargin{1}))) |
6494 | 68 if (! isnumeric (cond) || ! all (cond(:))) |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
69 if (nargin == 1) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
70 error ("assert %s failed", in); # say which elements failed? |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
71 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
72 error (varargin{:}); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
73 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
74 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
75 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
76 if (nargin < 2 || nargin > 3) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
77 print_usage (); |
5589 | 78 endif |
79 | |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
80 expected = varargin {1}; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
81 if (nargin < 3) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
82 tol = 0; |
5589 | 83 else |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
84 tol = varargin {2}; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
85 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
86 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
87 if (exist ("argn") == 0) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
88 argn = " "; |
5589 | 89 endif |
90 | |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
91 coda = ""; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
92 iserror = 0; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
93 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
94 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
95 if (ischar (expected)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
96 iserror = (! ischar (cond) || ! strcmp (cond, expected)); |
5589 | 97 |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
98 elseif (iscell (expected)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
99 if (! iscell (cond) || any (size (cond) != size (expected))) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
100 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
101 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
102 try |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
103 for i = 1:length (expected(:)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
104 assert (cond{i}, expected{i}, tol); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
105 endfor |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
106 catch |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
107 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
108 end_try_catch |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
109 endif |
5589 | 110 |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
111 elseif (isstruct (expected)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
112 if (! isstruct (cond) || any (size (cond) != size (expected)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
113 || rows(struct_elements (cond)) != rows (struct_elements (expected))) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
114 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
115 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
116 try |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
117 empty = numel (cond) == 0; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
118 normal = numel (cond) == 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
119 for [v, k] = cond |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
120 if (! struct_contains (expected, k)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
121 error (); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
122 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
123 if (empty) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
124 v = cell (1, 0); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
125 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
126 if (normal) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
127 v = {v}; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
128 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
129 v = v(:)'; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
130 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
131 assert (v, {expected.(k)}, tol); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
132 endfor |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
133 catch |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
134 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
135 end_try_catch |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
136 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
137 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
138 elseif (ndims (cond) != ndims (expected) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
139 || any (size (cond) != size (expected))) |
5589 | 140 iserror = 1; |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
141 coda = "Dimensions don't match"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
142 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
143 elseif (tol == 0 && ! strcmp (typeinfo (cond), typeinfo (expected))) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
144 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
145 coda = cstrcat ("Type ", typeinfo (cond), " != ", typeinfo (expected)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
146 |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
147 else # numeric |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
148 A = cond(:); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
149 B = expected(:); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
150 ## Check exceptional values |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
151 if (any (isna (A) != isna (B))) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
152 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
153 coda = "NAs don't match"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
154 elseif (any (isnan (A) != isnan (B))) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
155 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
156 coda = "NaNs don't match"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
157 ### Try to avoid problems comparing strange values like Inf+NaNi. |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
158 elseif (any (isinf (A) != isinf (B)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
159 || any (A(isinf (A) & ! isnan (A)) != B(isinf (B) & ! isnan (B)))) |
5589 | 160 iserror = 1; |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
161 coda = "Infs don't match"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
162 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
163 ## Check normal values |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
164 A = A(finite (A)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
165 B = B(finite (B)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
166 if (tol == 0) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
167 err = any (A != B); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
168 errtype = "values do not match"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
169 elseif (tol >= 0) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
170 err = max (abs (A - B)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
171 errtype = "maximum absolute error %g exceeds tolerance %g"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
172 else |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
173 abserr = max (abs (A(B == 0))); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
174 A = A(B != 0); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
175 B = B(B != 0); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
176 relerr = max (abs (A - B) ./ abs (B)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
177 err = max ([abserr; relerr]); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
178 errtype = "maximum relative error %g exceeds tolerance %g"; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
179 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
180 if (err > abs (tol)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
181 iserror = 1; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
182 coda = sprintf (errtype, err, abs (tol)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
183 endif |
5589 | 184 endif |
185 endif | |
186 | |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
187 if (! iserror) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
188 return; |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
189 endif |
5589 | 190 |
7770
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
191 ## pretty print the "expected but got" info, |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
192 ## trimming leading and trailing "\n" |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
193 str = disp (expected); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
194 idx = find (str != "\n"); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
195 if (! isempty (idx)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
196 str = str(idx(1):idx(end)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
197 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
198 str2 = disp (cond); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
199 idx = find (str2 != "\n"); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
200 if (! isempty (idx)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
201 str2 = str2 (idx(1):idx(end)); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
202 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
203 msg = cstrcat ("assert ", in, " expected\n", str, "\nbut got\n", str2); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
204 if (! isempty (coda)) |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
205 msg = cstrcat (msg, "\n", coda); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
206 endif |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
207 error ("%s", msg); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
208 ## disp (msg); |
c6a1a217ac3c
Compatibility fix for assert
David Bateman <dbateman@free.fr>
parents:
7703
diff
changeset
|
209 ## error ("assertion failed"); |
5589 | 210 endif |
211 endfunction | |
212 | |
213 ## empty | |
214 %!assert([]) | |
215 %!assert(zeros(3,0),zeros(3,0)) | |
216 %!error assert(zeros(3,0),zeros(0,2)) | |
217 %!error assert(zeros(3,0),[]) | |
6455 | 218 %!fail("assert(zeros(2,0,2),zeros(2,0))", "Dimensions don't match") |
5589 | 219 |
220 ## conditions | |
221 %!assert(isempty([])) | |
222 %!assert(1) | |
223 %!error assert(0) | |
224 %!assert(ones(3,1)) | |
225 %!assert(ones(1,3)) | |
226 %!assert(ones(3,4)) | |
227 %!error assert([1,0,1]) | |
228 %!error assert([1;1;0]) | |
229 %!error assert([1,0;1,1]) | |
230 | |
231 ## vectors | |
232 %!assert([1,2,3],[1,2,3]); | |
233 %!assert([1;2;3],[1;2;3]); | |
234 %!error assert([2;2;3],[1;2;3]); | |
235 %!error assert([1,2,3],[1;2;3]); | |
236 %!error assert([1,2],[1,2,3]); | |
237 %!error assert([1;2;3],[1;2]); | |
238 %!assert([1,2;3,4],[1,2;3,4]); | |
239 %!error assert([1,4;3,4],[1,2;3,4]) | |
240 %!error assert([1,3;2,4;3,5],[1,2;3,4]) | |
241 | |
242 ## exceptional values | |
243 %!assert([NaN, NA, Inf, -Inf, 1+eps, eps],[NaN, NA, Inf, -Inf, 1, 0],eps) | |
244 %!error assert(NaN, 1) | |
245 %!error assert(NA, 1) | |
246 %!error assert(-Inf, Inf) | |
247 | |
248 ## scalars | |
249 %!error assert(3, [3,3; 3,3]) | |
250 %!error assert([3,3; 3,3], 3) | |
251 %!assert(3, 3); | |
252 %!assert(3+eps, 3, eps); | |
253 %!assert(3, 3+eps, eps); | |
254 %!error assert(3+2*eps, 3, eps); | |
255 %!error assert(3, 3+2*eps, eps); | |
256 | |
7027 | 257 ## must give a little space for floating point errors on relative |
5589 | 258 %!assert(100+100*eps, 100, -2*eps); |
259 %!assert(100, 100+100*eps, -2*eps); | |
260 %!error assert(100+300*eps, 100, -2*eps); | |
261 %!error assert(100, 100+300*eps, -2*eps); | |
262 %!error assert(3, [3,3]); | |
263 %!error assert(3,4); | |
264 | |
7027 | 265 ## test relative vs. absolute tolerances |
266 %!test assert (0.1+eps, 0.1, 2*eps); # accept absolute | |
267 %!error assert (0.1+eps, 0.1, -2*eps); # fail relative | |
268 %!test assert (100+100*eps, 100, -2*eps); # accept relative | |
269 %!error assert (100+100*eps, 100, 2*eps); # fail absolute | |
270 | |
5589 | 271 ## structures |
272 %!shared x,y | |
273 %! x.a = 1; x.b=[2, 2]; | |
274 %! y.a = 1; y.b=[2, 2]; | |
275 %!assert (x,y) | |
276 %!test y.b=3; | |
277 %!error assert (x,y) | |
278 %!error assert (3, x); | |
279 %!error assert (x, 3); | |
280 | |
281 ## check usage statements | |
282 %!error assert | |
283 %!error assert(1,2,3,4,5) | |
284 | |
285 ## strings | |
286 %!assert("dog","dog") | |
287 %!error assert("dog","cat") | |
288 %!error assert("dog",3); | |
289 %!error assert(3,"dog"); |