Mercurial > octave
changeset 24268:94c4ebecca6e
scripts/specfun/perms.m: fix return type and size for empty arrays (bug #52432)
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Fri, 17 Nov 2017 16:53:42 +0000 |
parents | ba51a6fd6a18 |
children | f494b87d2a93 |
files | scripts/specfun/perms.m |
diffstat | 1 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/specfun/perms.m Fri Nov 17 16:01:59 2017 +0000 +++ b/scripts/specfun/perms.m Fri Nov 17 16:53:42 2017 +0000 @@ -60,14 +60,13 @@ if (! (isreal (v) || iscomplex (v))) error ("perms: V must be a numeric, char, or logical vector"); endif - v = sort (reshape (v, 1, []), "descend"); n = length (v); if (n < 4) # special cases for small n switch (n) case 0 - A = []; + A = reshape (v, 1, 0); case 1 A = v; case 2 @@ -107,7 +106,6 @@ %!assert (rows (perms (1:6)), factorial (6)) -%!assert (perms ([]), []) %!assert (perms (pi), pi) %!assert (perms ([pi, e]), [pi, e; e, pi]) %!assert (perms ([1,2,3]), [3,2,1;3,1,2;2,3,1;2,1,3;1,3,2;1,2,3]) @@ -124,7 +122,6 @@ ## only for numeric data. %!test <52431> %! assert (perms ({1}), {1}) -%! assert (perms ({}), cell (1, 0)) %! assert (perms ({0.1, "foo"}), %! {"foo", 0.1; 0.1, "foo"}) %! assert (perms ({"foo", 0.1}), @@ -139,3 +136,14 @@ %! struct ("foo", {2, 1; 1, 2})) %! assert (perms (struct ("foo", {1, 2}, "bar", {3, 4})), %! struct ("foo", {2, 1; 1, 2}, "bar", {4, 3; 3, 4})) + +%!test <52432> +%! assert (perms ([]), reshape ([], 1, 0)) +%! assert (perms (single ([])), reshape (single ([]), 1, 0)) +%! assert (perms (int8 ([])), reshape (int8 ([]), 1, 0)) +%! assert (perms ({}), cell (1, 0)) +%! +%! s = struct (); +%! s(1) = []; +%! assert (perms (reshape (s, 0, 0)), reshape (s, 1, 0)) +%! assert (perms (reshape (s, 0, 1)), reshape (s, 1, 0))