Mercurial > octave
annotate scripts/set/setxor.m @ 33614:7f7d6bc5702b default tip @
maint: merge stable to default
author | Rik <rik@octave.org> |
---|---|
date | Mon, 20 May 2024 09:12:08 -0700 |
parents | 2e484f9f1f18 |
children |
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 ## |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
31706
diff
changeset
|
3 ## Copyright (C) 2006-2024 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27296
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/>. |
5825 | 7 ## |
8 ## This file is part of Octave. | |
9 ## | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
22802
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
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:
23220
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:
22323
diff
changeset
|
13 ## (at your option) any later version. |
5825 | 14 ## |
22802
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
18 ## GNU General Public License for more details. |
5825 | 19 ## |
20 ## You should have received a copy of the GNU General Public License | |
7016 | 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:
23220
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 ######################################################################## |
5825 | 25 |
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} =} setxor (@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} =} setxor (@var{a}, @var{b}, "rows") |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
29 ## @deftypefnx {} {@var{c} =} setxor (@dots{}, "sorted") |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
30 ## @deftypefnx {} {@var{c} =} setxor (@dots{}, "stable") |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
31 ## @deftypefnx {} {@var{c} =} setxor (@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}, @var{ib}] =} setxor (@dots{}) |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
33 ## |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
34 ## Return the unique elements exclusive to sets @var{a} or @var{b}. |
5825 | 35 ## |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
36 ## If @var{a} and @var{b} are both row vectors then return a row vector; |
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
37 ## Otherwise, return a column vector. The inputs may also be cell arrays of |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
38 ## strings. |
5825 | 39 ## |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
40 ## If the optional input @qcode{"rows"} is given then return the rows exclusive |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
41 ## to sets @var{a} and @var{b}. The inputs must be 2-D numeric matrices to use |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
42 ## this option. |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
43 ## |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
44 ## The optional argument @qcode{"sorted"}/@qcode{"stable"} controls the order |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
45 ## in which unique values appear in the output. The default is |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
46 ## @qcode{"sorted"} and values in the output are placed in ascending order. |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
47 ## The alternative @qcode{"stable"} preserves the order found in the input. |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
48 ## |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
49 ## The optional outputs @var{ia} and @var{ib} are column index vectors such |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
50 ## that @code{@var{a}(@var{ia})} and @code{@var{b}(@var{ib})} are disjoint sets |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
51 ## whose union is @var{c}. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
52 ## |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
53 ## Programming Note: The input flag @qcode{"legacy"} changes the algorithm |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
54 ## to be compatible with @sc{matlab} releases prior to R2012b. |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
55 ## |
5825 | 56 ## @seealso{unique, union, intersect, setdiff, ismember} |
57 ## @end deftypefn | |
58 | |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
59 function [c, ia, ib] = setxor (a, b, varargin) |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
60 |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
61 if (nargin < 2 || nargin > 4) |
6046 | 62 print_usage (); |
5825 | 63 endif |
64 | |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
65 [a, b] = validsetargs ("setxor", a, b, varargin{:}); |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
66 |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
67 by_rows = any (strcmp ("rows", varargin)); |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
68 optsorted = ! any (strcmp ("stable", varargin)); |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
69 optlegacy = any (strcmp ("legacy", varargin)); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
70 |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
71 if (optlegacy) |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
72 isrowvec = ! iscolumn (a) || ! iscolumn (b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
73 else |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
74 isrowvec = isrow (a) && isrow (b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
75 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
76 |
5825 | 77 ## Form A and B into sets. |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
78 if (nargout > 1 || ! optsorted) |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
79 [a, ia] = unique (a, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
80 [b, ib] = unique (b, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
81 else |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
82 a = unique (a, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
83 b = unique (b, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
84 endif |
5825 | 85 |
86 if (isempty (a)) | |
87 c = b; | |
88 elseif (isempty (b)) | |
89 c = a; | |
90 else | |
91 ## Reject duplicates. | |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
92 if (by_rows) |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
93 na = rows (a); nb = rows (b); |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
94 [c, i] = sortrows ([a; b]); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
95 n = rows (c); |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
96 idx = find (all (c(1:n-1, :) == c(2:n, :), 2)); |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
97 if (optsorted) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
98 if (! isempty (idx)) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
99 c([idx, idx+1],:) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
100 i([idx, idx+1],:) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
101 endif |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
102 else |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
103 c = [a; b]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
104 c(i([idx, idx+1]), :) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
105 if (nargout > 1) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
106 i([idx, idx+1]) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
107 ## FIXME: Is there a way to avoid a call to sort? |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
108 i = sort (i); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
109 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
110 endif |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
111 else |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
112 na = numel (a); nb = numel (b); |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
113 [c, i] = sort ([a(:); b(:)]); |
9481
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
114 if (iscell (c)) |
27296
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
115 idx = find (strcmp (c(1:end-1), c(2:end))); |
9481
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
116 else |
27296
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
117 idx = find (c(1:end-1) == c(2:end)); |
9481
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
118 endif |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
119 if (optsorted) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
120 if (! isempty (idx)) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
121 c([idx, idx+1]) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
122 i([idx, idx+1]) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
123 endif |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
124 else |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
125 c = [a(:); b(:)]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
126 c(i([idx, idx+1])) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
127 if (nargout > 1) |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
128 i([idx, idx+1]) = []; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
129 ## FIXME: Is there a way to avoid a call to sort? |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
130 i = sort (i); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
131 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
132 endif |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
133 |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
134 ## Adjust output orientation for Matlab compatibility |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
135 if (isrowvec) |
10549 | 136 c = c.'; |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
137 endif |
5825 | 138 endif |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
139 |
19157
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
140 if (nargout > 1) |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
141 ia = ia(i(i <= na)); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
142 ib = ib(i(i > na) - na); |
29190
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
143 if (optlegacy && isrowvec && ! by_rows) |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
144 ia = ia(:).'; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
145 ib = ib(:).'; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
146 endif |
19157
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
147 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
148 endif |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
149 |
5825 | 150 endfunction |
151 | |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
152 |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
153 %!assert (setxor ([3,1,2], [4,3,2]), [1,4]) |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
154 %!assert (setxor ({'a'}, {'a', 'b'}), {'b'}) |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
155 %!assert (setxor ([5, NaN, NaN], [NaN, NaN, 5]), [NaN NaN NaN NaN]) |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
156 |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
157 %!test |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
158 %! a = [3, 1, 4, 1, 5]; |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
159 %! b = [1; 2; 3; 4]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
160 %! [c, ia, ib] = setxor (a, b); |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
161 %! assert (c, [2; 5]); |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
162 %! assert (ia, [5]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
163 %! assert (ib, [2]); |
9498
f7cc8f30f3b8
Added test for setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9481
diff
changeset
|
164 |
27296
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
165 ## Test multi-dimensional arrays |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
166 %!test |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
167 %! a = rand (3,3,3); |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
168 %! b = a; |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
169 %! b(1,1,1) = 2; |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
170 %! assert (intersect (a, b), sort (a(2:end)')); |
538468f901dd
Clean up BIST tests in set functions.
Rik <rik@octave.org>
parents:
27294
diff
changeset
|
171 |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
172 ## Test "rows" input |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
173 %!test |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
174 %! a = [1 2; 4 5; 1 3]; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
175 %! b = [1 1; 1 2; 4 5; 2 10]; |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
176 %! [c, ia, ib] = setxor (a, b, "rows"); |
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
177 %! assert (c, [1 1; 1 3; 2 10]); |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
178 %! assert (ia, [3]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
179 %! assert (ib, [1; 4]); |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
180 |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
181 ## Test "stable" sort order |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
182 %!test |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
183 %! a = [3, 1, 4, 1, 5]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
184 %! b = [1; 2; 3; 4]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
185 %! [c, ia, ib] = setxor (a, b, "stable"); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
186 %! assert (c, [5; 2]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
187 %! assert (ia, [5]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
188 %! assert (ib, [2]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
189 |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
190 %!test |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
191 %! a = [1 2; 4 5; 1 3]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
192 %! b = [1 1; 1 2; 4 5; 2 10]; |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
193 %! [c, ia, ib] = setxor (a, b, "rows", "stable"); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
194 %! assert (c, [1 3; 1 1; 2 10]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
195 %! assert (ia, [3]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
196 %! assert (ib, [1; 4]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
197 |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
198 ## Test various empty matrix inputs |
19157
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
199 %!assert (setxor (1, []), 1) |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
200 %!assert (setxor ([], 1), 1) |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
201 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
202 %!test |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
203 %! [c, ia, ib] = setxor ([3 1], []); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
204 %! assert (c, [1 3]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
205 %! assert (ia, [2; 1]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
206 %! assert (ib, []); |
19157
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
207 %!test |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
208 %! [c, ia, ib] = setxor ([], [3 1]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
209 %! assert (c, [1 3]); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
210 %! assert (ia, []); |
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
211 %! assert (ib, [2; 1]); |
19157
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
212 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
213 %!test |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
214 %! a = [2 1; 4 3]; b = []; |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
215 %! [c, ia, ib] = setxor (a, b); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
216 %! assert (c, [1; 2; 3; 4]); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
217 %! assert (ia, [3; 1; 4; 2]); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
218 %! assert (isempty (ib)); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
219 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
220 %!test |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
221 %! a = []; b = [2 1; 4 3]; |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
222 %! [c, ia, ib] = setxor (a, b); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
223 %! assert (c, [1; 2; 3; 4]); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
224 %! assert (isempty (ia)); |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
225 %! assert (ib, [3; 1; 4; 2]); |
27294
aa4147476138
setxor.m: Add new option "stable" to control output ordering.
Rik <rik@octave.org>
parents:
27238
diff
changeset
|
226 |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
227 ## Test orientation of output |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
228 %!shared x,y |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
229 %! x = 1:3; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
230 %! y = 2:5; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
231 |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
232 %!assert (size (setxor (x, y)), [1 3]) |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
233 %!assert (size (setxor (x', y)), [3 1]) |
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
234 %!assert (size (setxor (x, y')), [3 1]) |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
235 %!assert (size (setxor (x', y')), [3 1]) |
29190
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
236 %!assert (size (setxor (x, y, "legacy")), [1, 3]) |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
237 %!assert (size (setxor (x', y, "legacy")), [1, 3]) |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
238 %!assert (size (setxor (x, y', "legacy")), [1, 3]) |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
239 %!assert (size (setxor (x', y', "legacy")), [3, 1]) |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
240 |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
241 ## Test "legacy" input |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
242 %!test |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
243 %! a = [5 1 3 3 3]; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
244 %! b = [4 1 2 2]; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
245 %! [c,ia,ib] = setxor (a,b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
246 %! assert (c, [2, 3, 4, 5]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
247 %! assert (ia, [3; 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
248 %! assert (ib, [3; 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
249 %! [c,ia,ib] = setxor (a,b, "legacy"); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
250 %! assert (c, [2, 3, 4, 5]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
251 %! assert (ia, [5, 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
252 %! assert (ib, [4, 1]); |
29190
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
253 |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
254 %!test # "legacy" + "rows" |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
255 %! A = [1 2; 3 4; 5 6; 3 4; 7 8]; |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
256 %! B = [3 4; 7 8; 9 10]; |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
257 %! [c, ia, ib] = setxor (A, B, "rows"); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
258 %! assert (c, [1, 2; 5, 6; 9, 10]); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
259 %! assert (ia, [1; 3]); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
260 %! assert (ib, [3]); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
261 %! [c, ia, ib] = setxor (A, B, "rows", "legacy"); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
262 %! assert (c, [1, 2; 5, 6; 9, 10]); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
263 %! assert (ia, [1; 3]); |
7f11d59e3af8
Fix incorrect results for set functions with "legacy" option (bug #59708).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
264 %! assert (ib, [3]); |