# HG changeset patch # User John W. Eaton # Date 1334683136 14400 # Node ID 3a9a56999ce5138e4fb0732021a5b1ffe18735e4 # Parent 98aaebc56d7cada3bf26704f8dcacd3dd2dccd1d# Parent 82449d607d208601911bd8ae810112bd20f362ce maint: periodic merge from stable to default diff -r 98aaebc56d7c -r 3a9a56999ce5 src/data.cc --- a/src/data.cc Fri Mar 30 18:44:01 2012 +0200 +++ b/src/data.cc Tue Apr 17 13:18:56 2012 -0400 @@ -1337,6 +1337,9 @@ ## Test non-square size %!assert(diag ([1,2,3], 6, 3), [1 0 0; 0 2 0; 0 0 3; 0 0 0; 0 0 0; 0 0 0]) +%!assert (diag (1, 2, 3), [1,0,0; 0,0,0]); +%!assert (diag ({1}, 2, 3), {1,[],[]; [],[],[]}); +%!assert (diag ({1,2}, 3, 4), {1,[],[],[]; [],2,[],[]; [],[],[],[]}); %% Test input validation %!error diag () diff -r 98aaebc56d7c -r 3a9a56999ce5 src/oct-map.cc --- a/src/oct-map.cc Fri Mar 30 18:44:01 2012 +0200 +++ b/src/oct-map.cc Tue Apr 17 13:18:56 2012 -0400 @@ -971,7 +971,7 @@ octave_idx_type nf = nfields (); for (octave_idx_type k = 0; k < nf; k++) - xvals[k].assign (i, rhs.xvals[k]); + xvals[k].assign (i, rhs.xvals[k], Matrix ()); if (nf > 0) dimensions = xvals[0].dims (); @@ -1014,7 +1014,7 @@ octave_idx_type nf = nfields (); for (octave_idx_type k = 0; k < nf; k++) - xvals[k].assign (i, j, rhs.xvals[k]); + xvals[k].assign (i, j, rhs.xvals[k], Matrix ()); if (nf > 0) dimensions = xvals[0].dims (); @@ -1057,7 +1057,7 @@ octave_idx_type nf = nfields (); for (octave_idx_type k = 0; k < nf; k++) - xvals[k].assign (ia, rhs.xvals[k]); + xvals[k].assign (ia, rhs.xvals[k], Matrix ()); if (nf > 0) dimensions = xvals[0].dims (); @@ -1170,6 +1170,13 @@ setfield (k, tmp); } +/* +%!test +%! rhs.b = 1; +%! a(3) = rhs; +%! assert ({a.b}, {[], [], 1}) +*/ + void octave_map::delete_elements (const idx_vector& i) { diff -r 98aaebc56d7c -r 3a9a56999ce5 src/ov-base-sparse.cc --- a/src/ov-base-sparse.cc Fri Mar 30 18:44:01 2012 +0200 +++ b/src/ov-base-sparse.cc Tue Apr 17 13:18:56 2012 -0400 @@ -318,7 +318,13 @@ << ", cols = " << nc << ", nnz = " << nz; - double dnel = matrix.numel (); + // Avoid calling numel here since it can easily overflow + // octave_idx_type even when there is no real problem storing the + // sparse array. + + double dnr = nr; + double dnc = nc; + double dnel = dnr * dnc; if (dnel > 0) {