annotate scripts/set/setdiff.m @ 27237:67e5e997a3bf

setdiff.m: Accept a "legacy" flag for Matlab compatibility. * NEWS: Announce change to setdiff return values when given "rows" argument. Announce "legacy" flag. * setdiff.m Add new calling form and explanation of "legacy" option to docstring. Allow up to 4 inputs in input validation. Check for "legacy" in input options and set variable optlegacy. Set variable isrowvec based on optlegacy and orientation of inputs. Add BIST tests for "rows" and "legacy" inputs.
author Rik <rik@octave.org>
date Thu, 11 Jul 2019 15:29:38 -0700
parents 00f796120a6d
children 6525b3fe3cf9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 25694
diff changeset
1 ## Copyright (C) 2000-2019 Paul Kienzle
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 10793
diff changeset
2 ## Copyright (C) 2008-2009 Jaroslav Hajek
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
3 ##
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
4 ## This file is part of Octave.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
5 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23573
diff changeset
6 ## Octave is free software: you can redistribute it and/or modify it
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
7 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23573
diff changeset
8 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22489
diff changeset
9 ## (at your option) any later version.
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
10 ##
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
11 ## Octave is distributed in the hope that it will be useful, but
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22489
diff changeset
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22489
diff changeset
14 ## GNU General Public License for more details.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
15 ##
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
16 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6386
diff changeset
17 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23573
diff changeset
18 ## <https://www.gnu.org/licenses/>.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
19
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
20 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20437
diff changeset
21 ## @deftypefn {} {@var{c} =} setdiff (@var{a}, @var{b})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20437
diff changeset
22 ## @deftypefnx {} {@var{c} =} setdiff (@var{a}, @var{b}, "rows")
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
23 ## @deftypefnx {} {@var{c} =} setdiff (@dots{}, "legacy")
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20437
diff changeset
24 ## @deftypefnx {} {[@var{c}, @var{ia}] =} setdiff (@dots{})
19974
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
25 ## Return the unique elements in @var{a} that are not in @var{b} sorted in
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
26 ## ascending order.
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
27 ##
25694
1fa7459a8697 setdiff.m: Fix typo in documentation (bug #54393).
Rik <rik@octave.org>
parents: 25054
diff changeset
28 ## If @var{a} is a row vector return a row vector; Otherwise, return a
20160
03b9d17a2d95 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19974
diff changeset
29 ## column vector. The inputs may also be cell arrays of strings.
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
30 ##
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19003
diff changeset
31 ## If the optional input @qcode{"rows"} is given then return the rows in
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
32 ## @var{a} that are not in @var{b}. The inputs must be 2-D matrices to use
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
33 ## this option.
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
34 ##
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
35 ## If requested, return the index vector @var{ia} such that
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
36 ## @code{@var{c} = @var{a}(@var{ia})}.
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
37 ##
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
38 ## Programming Note: The input flag @qcode{"legacy"} changes the algorithm
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
39 ## to be compatible with @sc{matlab} releases prior to R2012b.
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
40 ##
5642
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5307
diff changeset
41 ## @seealso{unique, union, intersect, setxor, ismember}
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
42 ## @end deftypefn
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
43
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
44 ## Author: Paul Kienzle
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
45 ## Adapted-by: jwe
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
46
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
47 function [c, ia] = setdiff (a, b, varargin)
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
48
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
49 if (nargin < 2 || nargin > 4)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5967
diff changeset
50 print_usage ();
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
51 endif
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
52
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
53 [a, b] = validsetargs ("setdiff", a, b, varargin{:});
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
54
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
55 by_rows = any (strcmp ("rows", varargin));
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
56 optlegacy = any (strcmp ("legacy", varargin));
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
57
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
58 if (optlegacy)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
59 isrowvec = ! iscolumn (a) || ! iscolumn (b);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
60 else
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
61 isrowvec = isrow (a);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
62 endif
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
63
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
64 if (by_rows)
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
65 if (nargout > 1)
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
66 [c, ia] = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
67 else
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
68 c = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
69 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
70 if (! isempty (c) && ! isempty (b))
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
71 ## Form A and B into combined set.
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
72 b = unique (b, varargin{:});
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
73 [tmp, idx] = sortrows ([c; b]);
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
74 ## Eliminate those elements of A that are the same as in B.
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
75 dups = find (all (tmp(1:end-1,:) == tmp(2:end,:), 2));
6386
5a91bf0a47e8 [project @ 2007-03-07 05:56:43 by jwe]
jwe
parents: 6385
diff changeset
76 c(idx(dups),:) = [];
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
77 if (nargout > 1)
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
78 ia(idx(dups),:) = [];
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
79 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
80 endif
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
81 else
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
82 if (nargout > 1)
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
83 [c, ia] = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
84 else
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
85 c = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
86 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
87 if (! isempty (c) && ! isempty (b))
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
88 ## Form a and b into combined set.
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
89 b = unique (b);
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
90 [tmp, idx] = sort ([c(:); b(:)]);
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
91 ## Eliminate those elements of a that are the same as in b.
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
92 if (iscellstr (tmp))
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
93 dups = find (strcmp (tmp(1:end-1), tmp(2:end)));
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
94 else
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
95 dups = find (tmp(1:end-1) == tmp(2:end));
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
96 endif
6386
5a91bf0a47e8 [project @ 2007-03-07 05:56:43 by jwe]
jwe
parents: 6385
diff changeset
97 c(idx(dups)) = [];
18843
30d8501a857a setdiff.m: Orient output (row/column) the same as Matlab (bug #42577).
Rik <rik@octave.org>
parents: 17744
diff changeset
98 ## Reshape if necessary for Matlab compatibility.
19974
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
99 if (isrowvec)
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
100 c = c(:).';
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
101 else
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
102 c = c(:);
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
103 endif
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
104 if (nargout > 1)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
105 ia(idx(dups)) = [];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
106 if (optlegacy && isrowvec)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
107 ia = ia(:).';
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
108 endif
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
109 endif
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
110 endif
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
111 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
112
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
113 endfunction
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
114
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
115
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
116 %!assert (setdiff (["bb";"zz";"bb";"zz"], ["bb";"cc";"bb"], "rows"), "zz")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
117 %!assert (setdiff (["b";"z";"b";"z"], ["b";"c";"b"], "rows"), "z")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
118 %!assert (setdiff (["b";"z";"b";"z"], ["b";"c";"b"]), "z")
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
119 %!assert (setdiff ([1, 1; 2, 2; 3, 3; 4, 4], [1, 1; 2, 2; 4, 4], "rows"), [3 3])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
120 %!assert (setdiff ([1; 2; 3; 4], [1; 2; 4], "rows"), 3)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
121 %!assert (setdiff ([1, 2; 3, 4], [1, 2; 3, 6], "rows"), [3, 4])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
122 %!assert (setdiff ({"one","two";"three","four"}, {"one","two";"three","six"}), {"four"})
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
123
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
124 %!test
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
125 %! a = [3, 1, 4, 1, 5];
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
126 %! b = [1, 2, 3, 4];
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
127 %! [c, ia] = setdiff (a, b');
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
128 %! assert (c, [5]);
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
129 %! assert (c, a(ia));
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
130
22489
93ea313301f9 test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents: 22323
diff changeset
131 ## Test output orientation compatibility
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
132 %!assert <*42577> (setdiff ([1:5], 2), [1,3,4,5])
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
133 %!assert <*42577> (setdiff ([1:5]', 2), [1;3;4;5])
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
134 %!assert <*42577> (setdiff ([1:5], [2:3]), [1,4,5])
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
135 %!assert <*42577> (setdiff ([1:5], [2:3]'), [1,4,5])
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
136 %!assert <*42577> (setdiff ([1:5]', [2:3]), [1;4;5])
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
137 %!assert <*42577> (setdiff ([1:5]', [2:3]'), [1;4;5])
18843
30d8501a857a setdiff.m: Orient output (row/column) the same as Matlab (bug #42577).
Rik <rik@octave.org>
parents: 17744
diff changeset
138
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
139 %!test
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
140 %! a = rand (3,3,3);
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
141 %! b = a(1);
19974
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
142 %! assert (setdiff (a, b), sort (a(2:end)'));
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
143
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
144 ## Test "rows" compatibility
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
145 %!test
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
146 %! a = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
147 %! b = [0 0 0; 5 5 5];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
148 %! [c, ia] = setdiff (a, b, "rows");
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
149 %! assert (c, [1, 4 ,5; 7, 9 7]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
150 %! assert (ia, [5; 1]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
151
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
152 ## Test "legacy" option
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
153 %!test
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
154 %! a = [3, 6, 2, 1, 5, 1, 1];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
155 %! b = [2, 4, 6];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
156 %! [c, ia] = setdiff (a, b);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
157 %! assert (c, [1, 3, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
158 %! assert (ia, [4; 1; 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
159 %! [c, ia] = setdiff (a, b, "legacy");
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
160 %! assert (c, [1, 3, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
161 %! assert (ia, [7, 1, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
162
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
163 ## "legacy" + "rows" compatibility
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
164 %!test
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
165 %! a = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
166 %! b = [0 0 0; 5 5 5];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
167 %! [c, ia] = setdiff (a, b, "rows", "legacy");
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
168 %! assert (c, [1, 4 ,5; 7, 9 7]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
169 %! assert (ia, [5; 3]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
170
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
171 ## Output orientation with "legacy" option
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
172 %!assert (size (setdiff ([1:5], [2:3], "legacy")), [1, 3])
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
173 %!assert (size (setdiff ([1:5]', [2:3], "legacy")), [1, 3])
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
174 %!assert (size (setdiff ([1:5], [2:3]', "legacy")), [1, 3])
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
175 %!assert (size (setdiff ([1:5]', [2:3]', "legacy")), [3, 1])