changeset 29328:4d3cfe193f65 stable

qr: Error for dense A and B with three output arguments (bug #58944). * libinterp/corefcn/qr.cc (Fqr): Error for dense A and B with three output arguments. Remove duplicate BISTs.
author Markus Mützel <markus.muetzel@gmx.de>
date Tue, 26 Jan 2021 15:20:33 +0100
parents 5fa1b4008204
children 24b9c62b453d 1ceeab926dc6
files libinterp/corefcn/qr.cc
diffstat 1 files changed, 23 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/qr.cc	Mon Jan 25 15:02:57 2021 -0800
+++ b/libinterp/corefcn/qr.cc	Tue Jan 26 15:20:33 2021 +0100
@@ -374,6 +374,9 @@
     }
   else
     {
+      if (have_b && nargout > 2)
+        error ("qr: too many output arguments for dense A with B");
+
       if (arg.is_single_type ())
         {
           if (arg.isreal ())
@@ -645,6 +648,10 @@
 
 %!error qr ()
 %!error qr ([1, 2; 3, 4], 0, 2)
+%!error <too many output arguments for dense A with B>
+%! [q, r, p] = qr (rand (3, 2), rand (3, 1));
+%!error <too many output arguments for dense A with B>
+%! [q, r, p] = qr (rand (3, 2), rand (3, 1), 0);
 
 %!function retval = __testqr (q, r, a, p)
 %!  tol = 100*eps (class (q));
@@ -757,18 +764,8 @@
 %! assert (qe * re, a(:, pe), sqrt (eps ("single")));
 
 %!test
-%! a = single([0, 2, 1; 2, 1, 2; 3, 1, 2]);
-%! b = single([1, 3, 2; 1, 1, 0; 3, 0, 2]);
-%!
-%! [q, r] = qr (a);
-%! [c, re] = qr (a, b);
-%!
-%! assert (r, re, sqrt (eps ("single")));
-%! assert (q'*b, c, sqrt (eps ("single")));
-
-%!test
-%! a = single([0, 2, i; 2, 1, 2; 3, 1, 2]);
-%! b = single([1, 3, 2; 1, i, 0; 3, 0, 2]);
+%! a = single ([0, 2, 1; 2, 1, 2; 3, 1, 2]);
+%! b = single ([1, 3, 2; 1, 1, 0; 3, 0, 2]);
 %!
 %! [q, r] = qr (a);
 %! [c, re] = qr (a, b);
@@ -777,8 +774,18 @@
 %! assert (q'*b, c, sqrt (eps ("single")));
 
 %!test
-%! a = single([0, 2, i; 2, 1, 2; 3, 1, 2]);
-%! b = single([1, 3, 2; 1, 1, 0; 3, 0, 2]);
+%! a = single ([0, 2, i; 2, 1, 2; 3, 1, 2]);
+%! b = single ([1, 3, 2; 1, i, 0; 3, 0, 2]);
+%!
+%! [q, r] = qr (a);
+%! [c, re] = qr (a, b);
+%!
+%! assert (r, re, sqrt (eps ("single")));
+%! assert (q'*b, c, sqrt (eps ("single")));
+
+%!test
+%! a = single ([0, 2, i; 2, 1, 2; 3, 1, 2]);
+%! b = single ([1, 3, 2; 1, 1, 0; 3, 0, 2]);
 %!
 %! [q, r] = qr (a);
 %! [c, re] = qr (a, b);
@@ -787,8 +794,8 @@
 %! assert (q'*b, c, sqrt (eps));
 
 %!test
-%! a = single([0, 2, 1; 2, 1, 2; 3, 1, 2]);
-%! b = single([1, 3, 2; 1, i, 0; 3, 0, 2]);
+%! a = single ([0, 2, 1; 2, 1, 2; 3, 1, 2]);
+%! b = single ([1, 3, 2; 1, i, 0; 3, 0, 2]);
 %!
 %! [q, r] = qr (a);
 %! [c, re] = qr (a, b);
@@ -796,9 +803,6 @@
 %! assert (r, re, sqrt (eps ("single")));
 %! assert (q'*b, c, sqrt (eps ("single")));
 
-%!error qr ()
-%!error qr ([1, 2; 3, 4], 0, 2)
-
 %!test
 %! t = ones (24, 1);
 %! j = 1;