# HG changeset patch # User Mike Miller # Date 1393022931 18000 # Node ID d28c4c4547ef5d7e9a747a8d8fd0d7a9936b9719 # Parent 83f5f2d414865e0826ab254ac5561d9caaa9fbdd Allow postpad and prepad to expand singleton dimensions (bug #41633) * postpad.m, prepad.m: Allow postpad and prepad to expand singleton dimensions. Add %!tests. Remove %!errors that are no longer errors. diff -r 83f5f2d41486 -r d28c4c4547ef scripts/general/postpad.m --- a/scripts/general/postpad.m Fri Feb 21 08:05:37 2014 -0600 +++ b/scripts/general/postpad.m Fri Feb 21 17:48:51 2014 -0500 @@ -30,6 +30,9 @@ ## ## If the optional argument @var{dim} is given, operate along this ## dimension. +## +## If @var{dim} is larger than the dimensions of @var{x}, the result will +## have @var{dim} dimensions. ## @seealso{prepad, cat, resize} ## @end deftypefn @@ -56,8 +59,7 @@ ## Find the first non-singleton dimension. (dim = find (sz > 1, 1)) || (dim = 1); else - if (!(isscalar (dim) && dim == fix (dim)) - || !(1 <= dim && dim <= nd)) + if (!(isscalar (dim) && dim == fix (dim) && dim >= 1)) error ("postpad: DIM must be an integer and a valid dimension"); endif endif @@ -89,9 +91,10 @@ %!assert (postpad ([1,2], 4, 2), [1,2,2,2]) %!assert (postpad ([1;2], 4, 2), [1;2;2;2]) %!assert (postpad ([1,2], 2, 2, 1), [1,2;2,2]) +%!assert (postpad ([1;2], 2, 2, 3), reshape ([1;2;2;2], 2, 1, 2)) +%!assert (postpad ([1,2], 2, 2, 3), reshape ([1,2,2,2], 1, 2, 2)) %!error postpad () %!error postpad (1) %!error postpad (1,2,3,4,5) -%!error postpad ([1,2], 2, 2,3) diff -r 83f5f2d41486 -r d28c4c4547ef scripts/general/prepad.m --- a/scripts/general/prepad.m Fri Feb 21 08:05:37 2014 -0600 +++ b/scripts/general/prepad.m Fri Feb 21 17:48:51 2014 -0500 @@ -30,6 +30,9 @@ ## ## If the optional argument @var{dim} is given, operate along this ## dimension. +## +## If @var{dim} is larger than the dimensions of @var{x}, the result will +## have @var{dim} dimensions. ## @seealso{postpad, cat, resize} ## @end deftypefn @@ -56,8 +59,7 @@ ## Find the first non-singleton dimension. (dim = find (sz > 1, 1)) || (dim = 1); else - if (!(isscalar (dim) && dim == fix (dim)) - || !(1 <= dim && dim <= nd)) + if (!(isscalar (dim) && dim == fix (dim) && dim >= 1)) error ("prepad: DIM must be an integer and a valid dimension"); endif endif @@ -92,6 +94,9 @@ %!assert (prepad ([1,2], 2, 2, 1), [2,2;1,2]) +%!assert (prepad ([1,2], 2, 2, 3), reshape ([2,2,1,2], 1, 2, 2)) +%!assert (prepad ([1;2], 2, 2, 3), reshape ([2;2;1;2], 2, 1, 2)) + ## FIXME -- we need tests for multidimensional arrays. %!error prepad () @@ -100,7 +105,6 @@ %!error prepad ([1,2], 2, ones (2)) %!error prepad ([1,2], 2, 2, ones (3)) %!error prepad ([1,2], 2, 2, 1.1) -%!error prepad ([1,2], 2, 2, 3) %!error prepad ([1,2], ones (2)) %!error prepad ([1,2], -1)