Index: test/test_slice_sparse.m =================================================================== RCS file: test/test_slice_sparse.m diff -N test/test_slice_sparse.m --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ test/test_slice_sparse.m 10 Jan 2008 06:10:29 -0000 @@ -0,0 +1,141 @@ +## Copyright (C) 2007 Kim Hansen +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +%!function x = set_slice(x, dim, slice) +%! switch dim +%! case 11 +%! x(slice) = 2; +%! case 21 +%! x(slice, :) = 2; +%! case 22 +%! x(:, slice) = 2; +%! otherwise +%! error("invalid dim, '%d'", dim); +%! endswitch +%! endfunction + +%!function test_sparse_slice(size, dim, slice) +%! x = ones(size); +%! s = set_slice(sparse(x), dim, slice); +%! f = set_slice(x, dim, slice); +%! assert(full(s), f); +%! endfunction + +#### 1d indexing + +## size = [2 0] +%!test test_sparse_slice([2 0], 11, []); +%!assert(set_slice(sparse(ones([2 0])), 11, 1), sparse([2 0]')); # sparse different from full +%!assert(set_slice(sparse(ones([2 0])), 11, 2), sparse([0 2]')); # sparse different from full +%!assert(set_slice(sparse(ones([2 0])), 11, 3), sparse([0 0 2]')); # sparse different from full +%!assert(set_slice(sparse(ones([2 0])), 11, 4), sparse([0 0 0 2]')); # sparse different from full + +## size = [0 2] +%!test test_sparse_slice([0 2], 11, []); +%!assert(set_slice(sparse(ones([0 2])), 11, 1), sparse(1,2)); # sparse different from full +%!test test_sparse_slice([0 2], 11, 2); +%!test test_sparse_slice([0 2], 11, 3); +%!test test_sparse_slice([0 2], 11, 4); + +## size = [2 1] +%!test test_sparse_slice([2 1], 11, []); +%!test test_sparse_slice([2 1], 11, 1); +%!test test_sparse_slice([2 1], 11, 2); +%!test test_sparse_slice([2 1], 11, 3); +%!test test_sparse_slice([2 1], 11, 4); + +## size = [1 2] +%!test test_sparse_slice([1 2], 11, []); +%!test test_sparse_slice([1 2], 11, 1); +%!test test_sparse_slice([1 2], 11, 2); +%!test test_sparse_slice([1 2], 11, 3); +%!test test_sparse_slice([1 2], 11, 4); + +## size = [2 2] +%!test test_sparse_slice([2 2], 11, []); +%!test test_sparse_slice([2 2], 11, 1); +%!test test_sparse_slice([2 2], 11, 2); +%!test test_sparse_slice([2 2], 11, 3); +%!test test_sparse_slice([2 2], 11, 4); +# These 2 errors are the same as in the full case +%!error set_slice(sparse(ones([2 2])), 11, 5); +%!error set_slice(sparse(ones([2 2])), 11, 6); + + +#### 2d indexing + +## size = [2 0] +%!test test_sparse_slice([2 0], 21, []); +%!test test_sparse_slice([2 0], 21, 1); +%!test test_sparse_slice([2 0], 21, 2); +%!assert(set_slice(sparse(ones([2 0])), 21, 3), sparse(2,0)); # sparse different from full +%!assert(set_slice(sparse(ones([2 0])), 21, 4), sparse(2,0)); # sparse different from full +%!test test_sparse_slice([2 0], 22, []); +%!test test_sparse_slice([2 0], 22, 1); +%!test test_sparse_slice([2 0], 22, 2); +%!assert(set_slice(sparse(ones([2 0])), 22, 3), sparse([0 0 2;0 0 2])); # sparse different from full +%!assert(set_slice(sparse(ones([2 0])), 22, 4), sparse([0 0 0 2;0 0 0 2])); # sparse different from full + +## size = [0 2] +%!test test_sparse_slice([0 2], 21, []); +%!test test_sparse_slice([0 2], 21, 1); +%!test test_sparse_slice([0 2], 21, 2); +%!assert(set_slice(sparse(ones([0 2])), 21, 3), sparse([0 0;0 0;2 2])); # sparse different from full +%!assert(set_slice(sparse(ones([0 2])), 21, 4), sparse([0 0;0 0;0 0;2 2])); # sparse different from full +%!test test_sparse_slice([0 2], 22, []); +%!test test_sparse_slice([0 2], 22, 1); +%!test test_sparse_slice([0 2], 22, 2); +%!assert(set_slice(sparse(ones([0 2])), 22, 3), sparse(0,2)); # sparse different from full +%!assert(set_slice(sparse(ones([0 2])), 22, 4), sparse(0,2)); # sparse different from full + +## size = [2 1] +%!test test_sparse_slice([2 1], 21, []); +%!test test_sparse_slice([2 1], 21, 1); +%!test test_sparse_slice([2 1], 21, 2); +%!test test_sparse_slice([2 1], 21, 3); +%!test test_sparse_slice([2 1], 21, 4); +%!test test_sparse_slice([2 1], 22, []); +%!test test_sparse_slice([2 1], 22, 1); +%!test test_sparse_slice([2 1], 22, 2); +%!test test_sparse_slice([2 1], 22, 3); +%!test test_sparse_slice([2 1], 22, 4); + +## size = [1 2] +%!test test_sparse_slice([1 2], 21, []); +%!test test_sparse_slice([1 2], 21, 1); +%!test test_sparse_slice([1 2], 21, 2); +%!test test_sparse_slice([1 2], 21, 3); +%!test test_sparse_slice([1 2], 21, 4); +%!test test_sparse_slice([1 2], 22, []); +%!test test_sparse_slice([1 2], 22, 1); +%!test test_sparse_slice([1 2], 22, 2); +%!test test_sparse_slice([1 2], 22, 3); +%!test test_sparse_slice([1 2], 22, 4); + +## size = [2 2] +%!test test_sparse_slice([2 2], 21, []); +%!test test_sparse_slice([2 2], 21, 1); +%!test test_sparse_slice([2 2], 21, 2); +%!test test_sparse_slice([2 2], 21, 3); +%!test test_sparse_slice([2 2], 21, 4); +%!test test_sparse_slice([2 2], 22, []); +%!test test_sparse_slice([2 2], 22, 1); +%!test test_sparse_slice([2 2], 22, 2); +%!test test_sparse_slice([2 2], 22, 3); +%!test test_sparse_slice([2 2], 22, 4); +