Mercurial > octave
comparison scripts/testfun/assert.m @ 28525:286fe9352cd6 stable
Interpreter errors on unassigned inputs (bug #58686)
* libinterp/parse-tree/pt-eval.cc (tree_evaluator::convert_to_const_vector):
Throw a proper error instead of silently ignoring the undefined value.
* scripts/testfun/assert.m: Fix comparison of empty structures. Now that the
interpreter is stricter on unassigned inputs to functions.
* test/nest/nest.tst: Mark xtest, because the test never worked. Octave's test
framework got fooled by the interpreter.
author | Kai T. Ohlhus <k.ohlhus@gmail.com> |
---|---|
date | Thu, 02 Jul 2020 15:06:36 +0900 |
parents | 70576ed5cc42 |
children | 8558c6ad4d71 |
comparison
equal
deleted
inserted
replaced
28520:627da618dcc4 | 28525:286fe9352cd6 |
---|---|
186 | 186 |
187 err.index{end+1} = "."; | 187 err.index{end+1} = "."; |
188 err.observed{end+1} = ["O(" sprintf("%dx", size(cond))(1:end-1) ")"]; | 188 err.observed{end+1} = ["O(" sprintf("%dx", size(cond))(1:end-1) ")"]; |
189 err.expected{end+1} = ["E(" sprintf("%dx", size(expected))(1:end-1) ")"]; | 189 err.expected{end+1} = ["E(" sprintf("%dx", size(expected))(1:end-1) ")"]; |
190 err.reason{end+1} = "Structure sizes don't match"; | 190 err.reason{end+1} = "Structure sizes don't match"; |
191 elseif (! strcmp (sort (fieldnames (cond)), | |
192 sort (fieldnames (expected)))) | |
193 err.index{end+1} = "."; | |
194 err.observed{end+1} = "O"; | |
195 err.expected{end+1} = "E"; | |
196 err.reason{end+1} = "Structure fieldname mismatch"; | |
191 else | 197 else |
192 try | 198 try |
193 empty = isempty (cond); | 199 assert (isempty (cond), isempty (expected)); |
194 normal = (numel (cond) == 1); | 200 |
195 for [v, k] = cond | 201 if (! isempty (cond)) |
196 if (! isfield (expected, k)) | 202 for [v, k] = cond |
197 err.index{end+1} = "."; | 203 if (numel (cond) == 1) |
198 err.observed{end+1} = "O"; | 204 v = {v}; |
199 err.expected{end+1} = "E"; | 205 else |
200 err.reason{end+1} = ["'" k "'" " is not an expected field"]; | 206 v = v(:)'; |
201 endif | 207 endif |
202 if (empty) | 208 ## Recursively call assert for struct array values |
203 v = {}; | 209 assert (v, {expected.(k)}, tol); |
204 elseif (normal) | 210 endfor |
205 v = {v}; | 211 endif |
206 else | |
207 v = v(:)'; | |
208 endif | |
209 ## Recursively call assert for struct array values | |
210 assert (v, {expected.(k)}, tol); | |
211 endfor | |
212 catch | 212 catch |
213 err.index{end+1} = "."; | 213 err.index{end+1} = "."; |
214 err.observed{end+1} = "O"; | 214 err.observed{end+1} = "O"; |
215 err.expected{end+1} = "E"; | 215 err.expected{end+1} = "E"; |
216 err.reason{end+1} = "Structure configuration error"; | 216 err.reason{end+1} = "Structure configuration error"; |
622 %!error <Structure sizes don't match> | 622 %!error <Structure sizes don't match> |
623 %! x.a = 1; | 623 %! x.a = 1; |
624 %! x.b = 1; | 624 %! x.b = 1; |
625 %! y.a = 1; | 625 %! y.a = 1; |
626 %! assert (x,y); | 626 %! assert (x,y); |
627 %!error <'b' is not an expected field> | 627 %!error <Structure fieldname mismatch> |
628 %! x.b = 1; | 628 %! x.b = 1; |
629 %! y.a = 1; | 629 %! y.a = 1; |
630 %! assert (x,y); | 630 %! assert (x,y); |
631 | 631 |
632 %!test | 632 %!test |