Mercurial > octave-dspies
diff scripts/set/powerset.m @ 19003:d00f6b09258f @
Overhaul functions in scripts/set directory.
* set.txi: Rewrite documentation for set functions.
* intersect.m: Rewrite docstring. Use by_rows variable for code clarity.
Return output orientation which is compatible with Matlab. Add %!tests for
output orientation and N-dimensional inputs.
* setdiff.m: Rewrite docstring. Use by_rows variable for code clarity.
Rename output i to ia to clarify it is an index into the set a.
Return output orientation which is compatible with Matlab. Add %!tests for
N-dimensional inputs.
* setxor.m: Rewrite docstring. Use by_rows variable for code clarity.
Return output orientation which is compatible with Matlab. Add %!tests for
output orientation and N-dimensional inputs.
* union.m: Rewrite docstring. Use by_rows variable for code clarity.
Return output orientation which is compatible with Matlab. Add %!tests for
output orientation and N-dimensional inputs. Add %!tests for validsetargs
which are common to all set functions.
* unique.m: Rewrite docstring. Verify that input is numeric or cell array
of strings. Avoid computing idx for optional i,j outputs unless required.
Add %!error tests for input validation.
* ismember.m: Rewrite docstring. Use input variable 'a' instead of 'A' for
conformance with rest of set functions. Rename output index variable to
s_idx for clarity that it is an index into the set s.
* powerset.m: Rewrite doctring. Add input validation on nargin. Add %!error
input validation tests.
* module.mk: Include validsetargs.m in build system.
* validsetargs.m: Function renamed from validargs which was too general.
* validargs.m: Function renamed to validsetargs.
author | Rik <rik@octave.org> |
---|---|
date | Mon, 11 Aug 2014 09:39:45 -0700 |
parents | d63878346099 |
children |
line wrap: on
line diff
--- a/scripts/set/powerset.m Sun Aug 10 08:18:18 2014 -0700 +++ b/scripts/set/powerset.m Mon Aug 11 09:39:45 2014 -0700 @@ -25,33 +25,35 @@ ## output will always be a cell array of either vectors or strings. ## ## With the optional second argument @qcode{"rows"}, each row of the set @var{a} -## is considered one element of the set. As a result, @var{a} must then be a -## numerical 2-D matrix. +## is considered one element of the set. The input must be a 2-D numeric +## matrix to use this argument. ## -## @seealso{unique, union, setxor, setdiff, ismember} +## @seealso{unique, union, intersect, setdiff, setxor, ismember} ## @end deftypefn function p = powerset (a, byrows_arg) + if (nargin < 1 || nargin > 2) + print_usage (); + endif + byrows = false; - if (nargin == 2) if (! strcmpi (byrows_arg, "rows")) error ('powerset: expecting second argument to be "rows"'); elseif (iscell (a)) - warning ('powerset: "rows" not valid for cell arrays'); + error ('powerset: "rows" not valid for cell arrays'); else byrows = true; endif - elseif (nargin != 1) - print_usage (); endif + if (iscell (a) && ! iscellstr (a)) - error ("powerset: cell arrays can only used for character strings"); + error ("powerset: cell arrays can only be used for character strings"); endif if (byrows) - a = unique (a, byrows_arg); + a = unique (a, "rows"); n = rows (a); else a = unique (a); @@ -86,12 +88,23 @@ endfunction -%!shared c, p -%! c = sort (cellstr ({ [], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]})); +%!test +%! c = sort (cellstr ({[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]})); %! p = sort (cellstr (powerset ([1, 2, 3]))); -%!assert (p, c); +%! assert (p, c); + +%!test %! c = sort (cellstr ({ [], [1:3], [2:4], [3:5], [1:3; 2:4], [1:3; 3:5], [2:4; 3:5], [1:3; 2:4; 3:5]})); %! p = sort (cellstr (powerset ([1:3;2:4;3:5], "rows"))); -%!assert (p,c); +%! assert (p,c); + %!assert (powerset([]), {}); # always return a cell array +%% Test input validation +%!error powerset () +%!error powerset (1,2,3) +%!error <expecting second argument to be "rows"> powerset (1, "cols") +%!error <"rows" not valid for cell arrays> powerset ({1}, "rows") +%!error <cell arrays can only be used for character> powerset ({1}) +%!error <not implemented for more than 32 elements> powerset (1:33) +