changeset 27947:70576ed5cc42

assert.m: Fix regression when observed output is large (bug #57615). * assert.m (pprint): Use max(..., 0) to guarantee that fieldwidth passed to sprintf never goes negative. Add BIST test for bug #57615.
author Rik <rik@octave.org>
date Thu, 16 Jan 2020 16:11:36 -0800
parents 14efec874546
children d34d33837fc4
files scripts/testfun/assert.m
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/testfun/assert.m	Thu Jan 16 15:50:28 2020 -0800
+++ b/scripts/testfun/assert.m	Thu Jan 16 16:11:36 2020 -0800
@@ -670,6 +670,14 @@
 %!   assert (! isempty (regexp (errmsg, '\(2,1\).*Rel err 2 exceeds tol 0.2')));
 %! end_try_catch
 
+%!test <*57615>
+%! try
+%!   assert (complex (pi*1e-17,2*pi), 0, 1e-1);
+%! catch
+%!   errmsg = lasterr ();
+%!   assert (isempty (strfind (errmsg, "sprintf: invalid field width")));
+%! end_try_catch
+
 ## test input validation
 %!error assert ()
 %!error assert (1,2,3,4)
@@ -703,10 +711,10 @@
     leno = length (err.observed{i});
     lene = length (err.expected{i});
     str = [str, sprintf("%*s%*s %*s%*s %*s%*s   %s\n",
-                        6+fix(leni/2), err.index{i}   , 6-fix(leni/2), "",
-                        6+fix(leno/2), err.observed{i}, 6-fix(leno/2), "",
-                        6+fix(lene/2), err.expected{i}, 6-fix(lene/2), "",
-                        err.reason{i})];
+                  6+fix(leni/2), err.index{i}   , max (6-fix(leni/2), 0), "",
+                  6+fix(leno/2), err.observed{i}, max (6-fix(leno/2), 0), "",
+                  6+fix(lene/2), err.expected{i}, max (6-fix(lene/2), 0), "",
+                  err.reason{i})];
   endfor
 
 endfunction