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))