# HG changeset patch # User Stefan Mahr # Date 1376903981 -7200 # Node ID 79d4b60899680a75ffc68440598f33e31a99f157 # Parent eb8bf49780fb6e1e301d50f6f46237de0681468f Fix isequal for sparse matrix (bug #37321) * Sparse-op-defs.h (SPARSE_BASE_REDUCTION_OP): Fix typo in indexing * __isequal__.m: Always return logical * isequal.m, Sparse.cc: Add tests diff --git a/liboctave/array/Sparse.cc b/liboctave/array/Sparse.cc --- a/liboctave/array/Sparse.cc +++ b/liboctave/array/Sparse.cc @@ -2793,6 +2793,19 @@ %! s(1,:) = []; %! assert (s, sparse ([], [], [], 0, 1)); +## Test (bug #37321) + +%!test a=sparse (0,0); assert (all (a)==sparse ([1])) +%!test a=sparse (0,1); assert (all (a)==sparse ([1])) +%!test a=sparse (1,0); assert (all (a)==sparse ([1])) +%!test a=sparse (1,0); assert (all (a,2)==sparse ([1])) +%!test a=sparse (1,0); assert (isequal (size (all (a,1)),[1 0])) +%!test a=sparse (1,1); assert (all (a)==sparse ([0])), assert (isequal (size (all (a)),[1 1])) +%!test a=sparse (2,1); assert (all (a)==sparse ([0])), assert (isequal (size (all (a)),[1 1])) +%!test a=sparse (1,2); assert (all (a)==sparse ([0])), assert (isequal (size (all (a)),[1 1])) +%!test a=sparse (2,2); assert (isequal(all (a),sparse ([0 0]))) + + */ template diff --git a/liboctave/operators/Sparse-op-defs.h b/liboctave/operators/Sparse-op-defs.h --- a/liboctave/operators/Sparse-op-defs.h +++ b/liboctave/operators/Sparse-op-defs.h @@ -1766,7 +1766,7 @@ for (octave_idx_type i = 0; i < nc ; i++) \ { \ retval.ridx (i) = 0; \ - retval.cidx (i+1) = i; \ + retval.cidx (i+1) = i+1; \ retval.data (i) = MT_RESULT; \ } \ } \ diff --git a/scripts/general/isequal.m b/scripts/general/isequal.m --- a/scripts/general/isequal.m +++ b/scripts/general/isequal.m @@ -74,6 +74,11 @@ ## test for inequality (struct) %!assert (isequal (struct ('a',NaN,'b',2),struct ('a',NaN,'b',2),struct ('a',NaN,'b',2)), false) +## test for sparse matrices +%!assert (isequal (sparse (0,1), sparse (0,1)), true) +%!assert (isequal (sparse (0,1), sparse (1,0)), false) +%!assert (isequal (sparse (2, 2), sparse (2, 2)), true) + ## Input validation %!error isequal () %!error isequal (1) diff --git a/scripts/general/private/__isequal__.m b/scripts/general/private/__isequal__.m --- a/scripts/general/private/__isequal__.m +++ b/scripts/general/private/__isequal__.m @@ -156,7 +156,7 @@ t = (l_f_x == length (f_y)) && all (f_x == f_y); if (!t) - return; + break; endif y = y(f_y); @@ -168,11 +168,17 @@ endif if (!t) - return; + break; endif endfor endif endif + if (!t) + t=logical(0); + else + t=logical(1); + endif + endfunction