annotate scripts/set/setdiff.m @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 01de0045b2e3
children 597f3ee61a48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30330
diff changeset
3 ## Copyright (C) 2000-2022 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 27898
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
7 ##
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
8 ## This file is part of Octave.
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 23573
diff changeset
10 ## 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
11 ## 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
12 ## 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
13 ## (at your option) any later version.
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
14 ##
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
15 ## 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
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22489
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22489
diff changeset
18 ## GNU General Public License for more details.
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 ## 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
21 ## 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
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
25
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
26 ## -*- texinfo -*-
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20437
diff changeset
27 ## @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
28 ## @deftypefnx {} {@var{c} =} setdiff (@var{a}, @var{b}, "rows")
27293
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
29 ## @deftypefnx {} {@var{c} =} setdiff (@dots{}, "sorted")
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
30 ## @deftypefnx {} {@var{c} =} setdiff (@dots{}, "stable")
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
31 ## @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
32 ## @deftypefnx {} {[@var{c}, @var{ia}] =} setdiff (@dots{})
27293
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
33 ## Return the unique elements in @var{a} that are not in @var{b}.
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
34 ##
25694
1fa7459a8697 setdiff.m: Fix typo in documentation (bug #54393).
Rik <rik@octave.org>
parents: 25054
diff changeset
35 ## 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
36 ## 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
37 ##
19597
db92e7e28e1f strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 19003
diff changeset
38 ## If the optional input @qcode{"rows"} is given then return the rows in
27293
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
39 ## @var{a} that are not in @var{b}. The inputs must be 2-D numeric matrices to
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
40 ## use this option.
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
41 ##
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
42 ## The optional argument @qcode{"sorted"}/@qcode{"stable"} controls the order
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
43 ## in which unique values appear in the output. The default is
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
44 ## @qcode{"sorted"} and values in the output are placed in ascending order.
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
45 ## The alternative @qcode{"stable"} preserves the order found in the input.
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
46 ##
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
47 ## 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
48 ## @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
49 ##
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
50 ## 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
51 ## 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
52 ##
5642
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5307
diff changeset
53 ## @seealso{unique, union, intersect, setxor, ismember}
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
54 ## @end deftypefn
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
55
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
56 function [c, ia] = setdiff (a, b, varargin)
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
57
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
58 if (nargin < 2 || nargin > 4)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5967
diff changeset
59 print_usage ();
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
60 endif
5181
41cd70503c72 [project @ 2005-03-03 05:49:55 by jwe]
jwe
parents: 5178
diff changeset
61
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
62 [a, b] = validsetargs ("setdiff", a, b, varargin{:});
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
63
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
64 by_rows = any (strcmp ("rows", varargin));
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
65 optlegacy = any (strcmp ("legacy", varargin));
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
66
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
67 if (optlegacy)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
68 isrowvec = ! iscolumn (a) || ! iscolumn (b);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
69 else
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
70 isrowvec = isrow (a);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
71 endif
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
72
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
73 if (by_rows)
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
74 if (nargout > 1)
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
75 [c, ia] = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
76 else
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
77 c = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
78 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
79 if (! isempty (c) && ! isempty (b))
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
80 ## 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
81 b = unique (b, varargin{:});
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
82 [csort, idx] = sortrows ([c; b]);
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
83 ## Eliminate those elements of A that are the same as in B.
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
84 dups = find (all (csort(1:end-1,:) == csort(2:end,:), 2));
6386
5a91bf0a47e8 [project @ 2007-03-07 05:56:43 by jwe]
jwe
parents: 6385
diff changeset
85 c(idx(dups),:) = [];
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
86 if (nargout > 1)
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
87 ia(idx(dups),:) = [];
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
88 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
89 endif
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
90 else
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
91 if (nargout > 1)
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
92 [c, ia] = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
93 else
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
94 c = unique (a, varargin{:});
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
95 endif
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
96 if (! isempty (c) && ! isempty (b))
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
97 ## Form a and b into combined set.
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
98 b = unique (b);
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
99 [csort, idx] = sort ([c(:); b(:)]);
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
100 ## Eliminate those elements of a that are the same as in b.
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
101 if (iscellstr (csort))
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
102 dups = find (strcmp (csort(1:end-1), csort(2:end)));
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
103 else
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
104 dups = find (csort(1:end-1) == csort(2:end));
6385
a192de8c0ead [project @ 2007-03-06 19:05:43 by jwe]
jwe
parents: 6248
diff changeset
105 endif
6386
5a91bf0a47e8 [project @ 2007-03-07 05:56:43 by jwe]
jwe
parents: 6385
diff changeset
106 c(idx(dups)) = [];
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
107
18843
30d8501a857a setdiff.m: Orient output (row/column) the same as Matlab (bug #42577).
Rik <rik@octave.org>
parents: 17744
diff changeset
108 ## 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
109 if (isrowvec)
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
110 c = c(:).';
72ccbd36e23c Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents: 19833
diff changeset
111 else
19003
d00f6b09258f Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents: 18843
diff changeset
112 c = c(:);
5786
9c3c903f037e [project @ 2006-05-03 20:03:41 by jwe]
jwe
parents: 5642
diff changeset
113 endif
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
114
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
115 if (nargout > 1)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
116 ia(idx(dups)) = [];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
117 if (optlegacy && isrowvec)
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
118 ia = ia(:).';
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
119 endif
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
120 endif
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
121 endif
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
122 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
123
5178
6758c11b5b99 [project @ 2005-03-03 05:18:04 by jwe]
jwe
parents:
diff changeset
124 endfunction
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
125
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
126
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
127 %!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
128 %!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
129 %!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
130 %!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
131 %!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
132 %!assert (setdiff ([1, 2; 3, 4], [1, 2; 3, 6], "rows"), [3, 4])
30330
01de0045b2e3 maint: Shorten some long lines to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents: 29358
diff changeset
133 %!assert (setdiff ({"one","two";"three","four"}, {"one","two";"three","six"}),
01de0045b2e3 maint: Shorten some long lines to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents: 29358
diff changeset
134 %! {"four"})
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
135
27296
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
136 ## Test multi-dimensional input
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
137 %!test
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
138 %! a = rand (3,3,3);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
139 %! b = a(1);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
140 %! assert (setdiff (a, b), sort (a(2:end)'));
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
141
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
142 ## Test "rows"
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
143 %!test
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
144 %! a = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5];
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
145 %! b = [0 0 0; 5 5 5];
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
146 %! [c, ia] = setdiff (a, b, "rows");
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
147 %! assert (c, [1, 4 ,5; 7, 9 7]);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
148 %! assert (ia, [5; 1]);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
149
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
150 %!test
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
151 %! a = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5];
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
152 %! b = [0 0 0; 5 5 5];
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
153 %! [c, ia] = setdiff (a, b, "rows", "stable");
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
154 %! assert (c, [7, 9 7; 1, 4 ,5]);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
155 %! assert (ia, [1; 5]);
538468f901dd Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents: 27293
diff changeset
156
27293
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
157 ## Test sorting order
7920
e56bb65186f6 improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents: 7017
diff changeset
158 %!test
27293
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
159 %! a = [5, 1, 4, 1, 3];
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
160 %! b = [1; 2; 4];
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
161 %! [c, ia] = setdiff (a, b, "sorted");
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
162 %! assert (c, [3, 5]);
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
163 %! assert (ia, [5; 1]);
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
164
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
165 %!test
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
166 %! a = [5, 1, 4, 1, 3];
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
167 %! b = [1; 2; 4];
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
168 %! [c, ia] = setdiff (a, b, "stable");
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
169 %! assert (c, [5, 3]);
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
170 %! assert (ia, [1; 5]);
6525b3fe3cf9 setdiff.m: Implement "stable" sorting option.
Rik <rik@octave.org>
parents: 27237
diff changeset
171
22489
93ea313301f9 test: Add bug ids (<#####>) to BIST tests.
Rik <rik@octave.org>
parents: 22323
diff changeset
172 ## 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
173 %!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
174 %!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
175 %!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
176 %!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
177 %!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
178 %!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
179
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
180 ## Test "legacy" option
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
181 %!test
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
182 %! 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
183 %! b = [2, 4, 6];
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
184 %! [c, ia] = setdiff (a, b);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
185 %! assert (c, [1, 3, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
186 %! assert (ia, [4; 1; 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
187 %! [c, ia] = setdiff (a, b, "legacy");
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
188 %! assert (c, [1, 3, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
189 %! assert (ia, [7, 1, 5]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
190
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
191 ## "legacy" + "rows" compatibility
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
192 %!test
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
193 %! 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
194 %! b = [0 0 0; 5 5 5];
29190
7f11d59e3af8 Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents: 27978
diff changeset
195 %! [c, ia] = setdiff (a, b, "rows");
7f11d59e3af8 Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents: 27978
diff changeset
196 %! assert (c, [1, 4 ,5; 7, 9 7]);
7f11d59e3af8 Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents: 27978
diff changeset
197 %! assert (ia, [5; 1]);
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
198 %! [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
199 %! 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
200 %! assert (ia, [5; 3]);
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
201
27797
5dcdd5bd46e2 maint: remove trailing spaces from code.
Rik <rik@octave.org>
parents: 27296
diff changeset
202 ## Output orientation with "legacy" option
27237
67e5e997a3bf setdiff.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents: 26376
diff changeset
203 %!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
204 %!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
205 %!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
206 %!assert (size (setdiff ([1:5]', [2:3]', "legacy")), [3, 1])