# HG changeset patch # User jwe # Date 1146686726 0 # Node ID 9c3c903f037ef35e438dbd3e372ec00b179a5156 # Parent 6b9cec830d729e4298c0cf0c469b81caac5f1d38 [project @ 2006-05-03 20:03:41 by jwe] diff --git a/run-octave.in b/run-octave.in new file mode 100755 --- /dev/null +++ b/run-octave.in @@ -0,0 +1,22 @@ +#! /bin/sh +top_srcdir=%top_srcdir% +builddir=%builddir% +LOADPATH="$top_srcdir/test//:$top_srcdir/scripts//:$builddir/scripts//:$builddir/src//:"; +args="--path=$LOADPATH" +if [ $# -gt 0 ]; then + if [ "x$1" = "x-g" ]; then + driver="gdb" + args="" + shift + elif [ "x$1" = "x-valgrind" ]; then + driver="valgrind --tool=memcheck" + shift + elif [ "x$1" = "x-strace" ]; then + driver="strace -o octave.trace" + shift + fi +fi +OCTAVE_SITE_INITFILE=$top_srcdir/scripts/startup/main-rcfile \ +LD_LIBRARY_PATH="$builddir/src:$builddir/liboctave:$builddir/libcruft" \ + exec $driver $builddir/src/octave $args "$@" + diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,7 @@ +2006-05-03 Bob Weigel + + * scripts/set/setdiff.m: New arg, byrows. New tests. + 2006-04-29 John W. Eaton * startup/main-rcfile: Disable some warnings. diff --git a/scripts/set/setdiff.m b/scripts/set/setdiff.m --- a/scripts/set/setdiff.m +++ b/scripts/set/setdiff.m @@ -19,34 +19,65 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {} setdiff (@var{a}, @var{b}) -## Return the elements in @var{a} but not in @var{b}, sorted in +## @deftypefnx {Function File} {} setdiff(@var{a}, @var{b}, "rows") +## Return the elements in @var{a} that are not in @var{b}, sorted in ## ascending order. If @var{a} and @var{b} are both column vectors ## return a column vector, otherwise return a row vector. +## +## Given the optional third argument @samp{"rows"}, return the rows in +## @var{a} that are not in @var{b}, sorted in ascending order by rows. ## @seealso{unique, union, intersect, setxor, ismember} ## @end deftypefn ## Author: Paul Kienzle ## Adapted-by: jwe -function c = setdiff (a, b) +function c = setdiff (a, b, byrows) + + if (nargin < 2 || nargin > 3) + usage ("setdiff (a, b) or setdiff (a, b, \"rows\")"); + endif - if (nargin != 2) - usage ("setdiff (a, b)"); + if (nargin == 3) + if (! strcmpi (byrows, "rows")) + error ("expecting third argument to be \"rows\""); + else + byrows = true; + endif + else + byrows = false; endif - c = unique (a); - if (! isempty (c) && ! isempty (b)) - ## Form a and b into combined set. - b = unique (b); - [dummy, idx] = sort ([c(:); b(:)]); - ## Eliminate those elements of a that are the same as in b. - n = length (dummy); - c(idx(find (dummy(1:n-1) == dummy(2:n)))) = []; - ## Reshape if necessary. - if (size (c, 1) != 1 && size (b, 1) == 1) - c = c.'; + if (byrows) + c = unique (a, "rows"); + if (! isempty (c) && ! isempty (b)) + ## Form a and b into combined set. + b = unique (b, "rows"); + [dummy, idx] = sortrows ([c; b]); + ## Eliminate those elements of a that are the same as in b. + n = length (dummy); + c(idx(find (dummy(1:n-1) == dummy(2:n))), :) = []; + endif + else + c = unique (a); + if (! isempty (c) && ! isempty (b)) + ## Form a and b into combined set. + b = unique (b); + [dummy, idx] = sort ([c(:); b(:)]); + ## Eliminate those elements of a that are the same as in b. + n = length (dummy); + c(idx(find (dummy(1:n-1) == dummy(2:n)))) = []; + ## Reshape if necessary. + if (size (c, 1) != 1 && size (b, 1) == 1) + c = c.'; + endif endif endif - + endfunction +%!assert(setdiff(["bb";"zz";"bb";"zz"],["bb";"cc";"bb"],"rows"), "zz") +%!assert(setdiff(["b";"z";"b";"z"],["b";"c";"b"],"rows"), "z") +%!assert(setdiff(["b";"z";"b";"z"],["b";"c";"b"]), "z") +%!assert(setdiff([1, 1; 2, 2; 3, 3; 4, 4], [1, 1; 2, 2; 4, 4], "rows"), [3 3]) +%!assert(setdiff([1; 2; 3; 4], [1; 2; 4], "rows"), 3)