diff test/args.tst @ 28193:56c209ff0a08 stable

improve handling of ans assignment with wrapper functions * oct-lvalue.h, oct-lvalue.cc (octave_lvalue::index_is_colon): New function. * pt-assign.cc (tree_multi_assignment::evaluate_n): Also handle result value when LHS is [varargout{:}] and varargout is defined but empty. * args.tst: New tests.
author John W. Eaton <jwe@octave.org>
date Wed, 08 Apr 2020 14:56:27 -0400
parents bd51beb6205e
children ec591c500fa4 0a5b15007766
line wrap: on
line diff
--- a/test/args.tst	Tue Apr 07 08:42:31 2020 +0200
+++ b/test/args.tst	Wed Apr 08 14:56:27 2020 -0400
@@ -124,6 +124,36 @@
 %! [s, t, u, v] = f (1, 2, 3);
 %! assert ([s t u v], [1 2 3 4]);
 
+## Wrapper functions
+%!function [x, y, z] = f (varargin)
+%!  assert (nargin, 0);
+%!  assert (nargout, 0);
+%!  x = 3;
+%!  y = 2;
+%!  z = 1;
+%!endfunction
+%!function varargout = wrapper_1 (varargin)
+%!  assert (nargout, 0);
+%!  [varargout{1:nargout}] = f ();
+%!endfunction
+%!function varargout = wrapper_2 (varargin)
+%!  assert (nargout, 0);
+%!  varargout = cell (1, nargout);
+%!  [varargout{1:nargout}] = f ();
+%!endfunction
+%!function varargout = wrapper_3 (varargin)
+%!  assert (nargout, 0);
+%!  varargout = cell (1, nargout);
+%!  [varargout{:}] = f ();
+%!endfunction
+%!test
+%! wrapper_1 ();
+%! assert (ans, 3);
+%! wrapper_2 ();
+%! assert (ans, 3);
+%! wrapper_3 ();
+%! assert (ans, 3);
+
 ## Test default arguments
 ## numeric
 %!function f (x = 0)