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