changeset 18513:d28c4c4547ef gui-release

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.
author Mike Miller <mtmiller@ieee.org>
date Fri, 21 Feb 2014 17:48:51 -0500
parents 83f5f2d41486
children 39fbe4aba560
files scripts/general/postpad.m scripts/general/prepad.m
diffstat 2 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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)
 
--- 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 <C must be empty or a scalar> prepad ([1,2], 2, ones (2))
 %!error <DIM must be an integer> prepad ([1,2], 2, 2, ones (3))
 %!error <DIM must be an integer> prepad ([1,2], 2, 2, 1.1)
-%!error <DIM must be an integer> prepad ([1,2], 2, 2, 3)
 %!error <L must be a positive scalar> prepad ([1,2], ones (2))
 %!error <L must be a positive scalar> prepad ([1,2], -1)