changeset 27325:983dab0902f7

More explicit error messages for invalid 2nd and 3rd inputs to diag(). * data.cc (Fdiag): Specify whether M (2nd input) or N (3rd input) is in error. Re-order BIST tests to have input validation last. Add check for text of error messages in input validation.
author Rik <rik@octave.org>
date Mon, 05 Aug 2019 20:04:10 -0700
parents 0cf70e494a3f
children a6907d46464f
files libinterp/corefcn/data.cc
diffstat 1 files changed, 14 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc	Mon Aug 05 17:16:27 2019 -0700
+++ b/libinterp/corefcn/data.cc	Mon Aug 05 20:04:10 2019 -0700
@@ -1231,8 +1231,8 @@
       if (arg0.ndims () != 2 || (arg0.rows () != 1 && arg0.columns () != 1))
         error ("diag: V must be a vector");
 
-      octave_idx_type m = args(1).xidx_type_value ("diag: invalid dimensions");
-      octave_idx_type n = args(2).xidx_type_value ("diag: invalid dimensions");
+      octave_idx_type m = args(1).xidx_type_value ("diag: invalid dimension M");
+      octave_idx_type n = args(2).xidx_type_value ("diag: invalid dimension N");
 
       retval = arg0.diag (m, n);
     }
@@ -1274,6 +1274,15 @@
 %!assert (diag (int8 ([0, 1, 0, 0; 0, 0, 2, 0; 0, 0, 0, 3; 0, 0, 0, 0]), 1), int8 ([1; 2; 3]))
 %!assert (diag (int8 ([0, 0, 0, 0; 1, 0, 0, 0; 0, 2, 0, 0; 0, 0, 3, 0]), -1), int8 ([1; 2; 3]))
 
+%!assert (diag (1, 3, 3), diag ([1, 0, 0]))
+%!assert (diag (i, 3, 3), diag ([i, 0, 0]))
+%!assert (diag (single (1), 3, 3), diag ([single(1), 0, 0]))
+%!assert (diag (single (i), 3, 3), diag ([single(i), 0, 0]))
+%!assert (diag ([1, 2], 3, 3), diag ([1, 2, 0]))
+%!assert (diag ([1, 2]*i, 3, 3), diag ([1, 2, 0]*i))
+%!assert (diag (single ([1, 2]), 3, 3), diag (single ([1, 2, 0])))
+%!assert (diag (single ([1, 2]*i), 3, 3), diag (single ([1, 2, 0]*i)))
+
 %!assert <*37411> (diag (diag ([5, 2, 3])(:,1)), diag([5 0 0 ]))
 %!assert <*37411> (diag (diag ([5, 2, 3])(:,1), 2),  [0 0 5 0 0; zeros(4, 5)])
 %!assert <*37411> (diag (diag ([5, 2, 3])(:,1), -2), [[0 0 5 0 0]', zeros(5, 4)])
@@ -1293,17 +1302,10 @@
 ## Test input validation
 %!error <Invalid call to diag> diag ()
 %!error <Invalid call to diag> diag (1,2,3,4)
-%!error diag (ones (2), 3, 3)
+%!error <V must be a vector> diag (ones (2), 3, 3)
 %!error diag (1:3, -4, 3)
-
-%!assert (diag (1, 3, 3), diag ([1, 0, 0]))
-%!assert (diag (i, 3, 3), diag ([i, 0, 0]))
-%!assert (diag (single (1), 3, 3), diag ([single(1), 0, 0]))
-%!assert (diag (single (i), 3, 3), diag ([single(i), 0, 0]))
-%!assert (diag ([1, 2], 3, 3), diag ([1, 2, 0]))
-%!assert (diag ([1, 2]*i, 3, 3), diag ([1, 2, 0]*i))
-%!assert (diag (single ([1, 2]), 3, 3), diag (single ([1, 2, 0])))
-%!assert (diag (single ([1, 2]*i), 3, 3), diag (single ([1, 2, 0]*i)))
+%!error diag (1:3, 4, -3)
+
 */
 
 DEFUN (prod, args, ,