Mercurial > octave-libtiff
changeset 30206:aaee7b170cb1
nchoosek.m: Allow struct inputs (bug #61119)
* nchoosek.m: Change input validation to avoid numeric checks if input V is
scalar but not a number. Add BIST tests for exceptional values of scalar
structs and struct arrays.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 23 Sep 2021 12:19:54 -0700 |
parents | 23a907b2dbd5 |
children | 8f61866f0f6d |
files | scripts/specfun/nchoosek.m |
diffstat | 1 files changed, 31 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/specfun/nchoosek.m Thu Sep 23 10:00:12 2021 -0700 +++ b/scripts/specfun/nchoosek.m Thu Sep 23 12:19:54 2021 -0700 @@ -102,8 +102,10 @@ if (! (isreal (k) && isscalar (k) && k >= 0 && k == fix (k))) error ("nchoosek: K must be an integer >= 0"); endif - if (isscalar (v) && (iscomplex (v) || v < k || v < 0 || v != fix (v))) - error ("nchoosek: N must be a non-negative integer >= K"); + if (isscalar (v)) + if (isnumeric (v) && (iscomplex (v) || v < k || v < 0 || v != fix (v))) + error ("nchoosek: N must be a non-negative integer >= K"); + endif endif n = numel (v); @@ -205,10 +207,35 @@ %!test %! x = nchoosek ({1, 2}, 0); %! assert (size (x), [1, 0]); -%! assert (isa (x, "cell")); +%! assert (iscell (x)); %! x = nchoosek ({1, 2}, 3); %! assert (size (x), [0, 3]); -%! assert (isa (x, "cell")); +%! assert (iscell (x)); + +%!test +%! s.a = [1 2 3]; +%! s.b = [4 5 6]; +%! x = nchoosek (s, 0); +%! assert (size (x), [1, 0]); +%! assert (isstruct (x)); +%! assert (fieldnames (x), {"a"; "b"}); +%! x = nchoosek (s, 3); +%! assert (size (x), [0, 3]); +%! assert (isstruct (x)); +%! assert (fieldnames (x), {"a"; "b"}); + +%!test +%! s.a = [1 2 3]; +%! s.b = [4 5 6]; +%! s(2).a = 1; # make s a struct array rather than scalar struct +%! x = nchoosek (s, 0); +%! assert (size (x), [1, 0]); +%! assert (isstruct (x)); +%! assert (fieldnames (x), {"a"; "b"}); +%! x = nchoosek (s, 3); +%! assert (size (x), [0, 3]); +%! assert (isstruct (x)); +%! assert (fieldnames (x), {"a"; "b"}); ## Test input validation %!error <Invalid call> nchoosek ()