# HG changeset patch # User jwe # Date 1142488638 0 # Node ID a8f6903535c99a6f3a7291a5bf4b9f916f6b4912 # Parent 9c9eac3a6513aae8b7253b682841eac0e5ae35bc [project @ 2006-03-16 05:54:20 by jwe] diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2006-03-16 John W. Eaton + + * general/rows.m, general/columns.m: Delete. + 2006-03-15 William Poetra Yoga Hadisoeseno * strings/strcmpi.m: Simplify. diff --git a/scripts/general/columns.m b/scripts/general/columns.m deleted file mode 100644 --- a/scripts/general/columns.m +++ /dev/null @@ -1,36 +0,0 @@ -## Copyright (C) 1996, 1997 John W. Eaton -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2, or (at your option) -## any later version. -## -## Octave is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, write to the Free -## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301, USA. - -## -*- texinfo -*- -## @deftypefn {Function File} {} columns (@var{a}) -## Return the number of columns of @var{a}. -## @seealso{size, rows, length, isscalar, isvector, ismatrix} -## @end deftypefn - -## Author: jwe - -function nc = columns (x) - - if (nargin != 1) - usage ("columns (x)"); - endif - - nc = size (x, 2); - -endfunction diff --git a/scripts/general/rows.m b/scripts/general/rows.m deleted file mode 100644 --- a/scripts/general/rows.m +++ /dev/null @@ -1,36 +0,0 @@ -## Copyright (C) 1996, 1997 John W. Eaton -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2, or (at your option) -## any later version. -## -## Octave is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, write to the Free -## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301, USA. - -## -*- texinfo -*- -## @deftypefn {Function File} {} rows (@var{a}) -## Return the number of rows of @var{a}. -## @seealso{size, columns, length, isscalar, isvector, ismatrix} -## @end deftypefn - -## Author: jwe - -function nr = rows (x) - - if (nargin != 1) - usage ("rows (x)"); - endif - - nr = size (x, 1); - -endfunction diff --git a/scripts/testfun/fail.m b/scripts/testfun/fail.m new file mode 100644 --- /dev/null +++ b/scripts/testfun/fail.m @@ -0,0 +1,107 @@ +## -*- texinfo -*- +## @deftypefn {Function File} {} fail (@var{code},@var{pattern}) +## @deftypefnx {Function File} {} fail (@var{code},'warning',@var{pattern}) +## +## Return true if @var{code} fails with an error message matching +## @var{pattern}, otherwise produce an error. Note that @var{code} +## is a string and if @var{code} runs successfully, the error produced is: +## +## @example +## expected error but got none +## @end example +## +## If the code fails with a different error, the message produced is: +## +## @example +## expected +## but got +## @end example +## +## The angle brackets are not part of the output. +## +## Called with three arguments, the behavior is similar to +## @code{fail(@var{code}, @var{pattern})}, but produces an error if no +## warning is given during code execution or if the code fails. +## +## @end deftypefn + +## This program is public domain +## Author: Paul Kienzle + +## PKG_ADD mark_as_command fail +function ret=fail(code,pattern,warning_pattern) + if nargin < 1 || nargin > 3 + usage("fail(code [, 'warning'] [, pattern])"); + endif + + ## sort out arguments + test_warning = (nargin > 1 && strcmp(pattern,'warning')); + if nargin == 3 + pattern = warning_pattern; + elseif nargin == 1 || (nargin==2 && test_warning) + pattern = ""; + endif + if isempty(pattern), pattern = "."; endif # match any nonempty message + + ## allow assert(fail()) + if nargout, ret=1; endif + + ## don't test failure if evalin doesn't exist + if !exist('evalin') || !exist('lastwarn'), return; endif + + if test_warning + ## perform the warning test + lastwarn(); # clear old warnings + state = warning("query","quiet"); # make sure warnings are turned on + warning("on","quiet"); + try + ## printf("lastwarn before %s: %s\n",code,lastwarn); + evalin("caller",sprintf("%s;",code)); + ## printf("lastwarn after %s: %s\n",code,lastwarn); + err = lastwarn; # retrieve new warnings + warning(state.state,"quiet"); + if isempty(err), + msg = sprintf("expected warning <%s> but got none", pattern); + else + err([1:9,end]) = []; # transform "warning: ...\n" to "..." + if !isempty(regexp(err,pattern,"once")), return; end + msg = sprintf("expected warning <%s>\nbut got <%s>", pattern,err); + endif + catch + warning(state.state,"quiet"); + err = lasterr; + err([1:7,end]) = []; # transform "error: ...\n", to "..." + msg = sprintf("expected warning <%s> but got error <%s>", pattern, err); + end + + else + ## perform the error test + try + evalin("caller",sprintf("%s;",code)); + msg = sprintf("expected error <%s> but got none", pattern); + catch + err=lasterr; + if (strcmp(err(1:7),"error:")) + err([1:6,end]) = []; # transform "error: ...\n", to "..." + endif + if !isempty(regexp(err,pattern,"once")), return; end + msg = sprintf("expected error <%s>\nbut got <%s>",pattern,err); + end + endif + + ## if we get here, then code didn't fail or error didn't match + error(msg); +endfunction + +%!fail ('[1,2]*[2,3]','nonconformant') +%!fail ("fail('[1,2]*[2;3]','nonconformant')","expected error but got none") +%!fail ("fail('[1,2]*[2,3]','usage:')","expected error \nbut got.*nonconformant") +%!fail ("warning('test warning')",'warning','test warning'); + +%!# fail ("warning('next test')",'warning','next test'); ## only allowed one warning test?!? + +## Comment out the following tests if you don't want to see what +## errors look like +% !fail ('a*[2;3]', 'nonconformant') +% !fail ('a*[2,3]', 'usage:') +% !fail ("warning('warning failure')", 'warning', 'success') diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2006-03-15 William Poetra Yoga Hadisoeseno + * src/data.cc (Frows, Fcolumns): New functions. + * DLD-FUNCTIONS/time.cc (Fstrptime, Fstrftime): Fix docstring. * strfns.cc (Fstrcmp): Fixed docstring. diff --git a/src/data.cc b/src/data.cc --- a/src/data.cc +++ b/src/data.cc @@ -1112,6 +1112,40 @@ return retval; } +DEFUN (rows, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} rows (@var{a})\n\ +Return the number of rows of @var{a}.\n\ +@seealso{size, columns, length, isscalar, isvector, ismatrix}\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 1) + retval = args(0).rows (); + else + print_usage ("rows"); + + return retval; +} + +DEFUN (columns, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} columns (@var{a})\n\ +Return the number of columns of @var{a}.\n\ +@seealso{size, rows, length, isscalar, isvector, and ismatrix}\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 1) + retval = args(0).columns (); + else + print_usage ("columns"); + + return retval; +} + DEFUN (sum, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} sum (@var{x}, @var{dim})\n\