Mercurial > octave
annotate scripts/set/setxor.m @ 27238:177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
* NEWS: Announce "legacy" flag.
* setxor.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. Adjust orientation of outputs ia, ib
based on optlegacy and isrowvec. Add BIST test for "legacy" input.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 11 Jul 2019 19:55:53 -0700 |
parents | 00f796120a6d |
children | aa4147476138 |
rev | line source |
---|---|
26376
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
1 ## Copyright (C) 2014-2019 Julien Bect |
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2 ## Copyright (C) 2008-2019 Jaroslav Hajek |
11523 | 3 ## Copyright (C) 2000, 2006-2007 Paul Kienzle |
5825 | 4 ## |
5 ## This file is part of Octave. | |
6 ## | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
7 ## 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
|
8 ## 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
|
9 ## 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
|
10 ## (at your option) any later version. |
5825 | 11 ## |
22802
0dcff7695e26
maint: Update more Copyright statements to use standard form.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
12 ## 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
|
13 ## 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
|
14 ## 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
|
15 ## GNU General Public License for more details. |
5825 | 16 ## |
17 ## You should have received a copy of the GNU General Public License | |
7016 | 18 ## 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
|
19 ## <https://www.gnu.org/licenses/>. |
5825 | 20 |
21 ## -*- texinfo -*- | |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20437
diff
changeset
|
22 ## @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
|
23 ## @deftypefnx {} {@var{c} =} setxor (@var{a}, @var{b}, "rows") |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
24 ## @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
|
25 ## @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
|
26 ## |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
27 ## Return the unique elements exclusive to sets @var{a} or @var{b} sorted in |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
28 ## ascending order. |
5825 | 29 ## |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
30 ## 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
|
31 ## 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
|
32 ## strings. |
5825 | 33 ## |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
34 ## If the optional input @qcode{"rows"} is given then return the rows exclusive |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
35 ## to sets @var{a} and @var{b}. The inputs must be 2-D matrices to use this |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
36 ## option. |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
37 ## |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
38 ## 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
|
39 ## 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
|
40 ## 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
|
41 ## |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
42 ## 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
|
43 ## 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
|
44 ## |
5825 | 45 ## @seealso{unique, union, intersect, setdiff, ismember} |
46 ## @end deftypefn | |
47 | |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
48 function [c, ia, ib] = setxor (a, b, varargin) |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
49 |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
50 if (nargin < 2 || nargin > 4) |
6046 | 51 print_usage (); |
5825 | 52 endif |
53 | |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
54 [a, b] = validsetargs ("setxor", a, b, varargin{:}); |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
55 |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
56 by_rows = any (strcmp ("rows", varargin)); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
57 optlegacy = any (strcmp ("legacy", varargin)); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
58 |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
59 if (optlegacy) |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
60 isrowvec = ! iscolumn (a) || ! iscolumn (b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
61 else |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
62 isrowvec = isrow (a) && isrow (b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
63 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
64 |
5825 | 65 ## Form A and B into sets. |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
66 if (nargout > 1) |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
67 [a, ia] = unique (a, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
68 [b, ib] = unique (b, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
69 else |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
70 a = unique (a, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
71 b = unique (b, varargin{:}); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
72 endif |
5825 | 73 |
74 if (isempty (a)) | |
75 c = b; | |
76 elseif (isempty (b)) | |
77 c = a; | |
78 else | |
79 ## Reject duplicates. | |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
80 if (by_rows) |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
81 na = rows (a); nb = rows (b); |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
82 [c, i] = sortrows ([a; b]); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
83 n = rows (c); |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
84 idx = find (all (c(1:n-1, :) == c(2:n, :), 2)); |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
85 if (! isempty (idx)) |
10549 | 86 c([idx, idx+1],:) = []; |
87 i([idx, idx+1],:) = []; | |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
88 endif |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
89 else |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
90 na = numel (a); nb = numel (b); |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
91 [c, i] = sort ([a(:); b(:)]); |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
92 n = length (c); |
9481
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
93 if (iscell (c)) |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
94 idx = find (strcmp (c(1:n-1), c(2:n))); |
9481
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
95 else |
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
96 idx = find (c(1:n-1) == c(2:n)); |
a3ae7abaf659
support cellstrs in setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9051
diff
changeset
|
97 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
98 if (! isempty (idx)) |
10549 | 99 c([idx, idx+1]) = []; |
100 i([idx, idx+1]) = []; | |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
101 endif |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
102 |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
103 ## 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
|
104 if (isrowvec) |
10549 | 105 c = c.'; |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
106 endif |
5825 | 107 endif |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
108 |
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
|
109 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
|
110 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
|
111 ib = ib(i(i > na) - na); |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
112 if (optlegacy && isrowvec) |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
113 ia = ia(:).'; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
114 ib = ib(:).'; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
115 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
|
116 endif |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
117 endif |
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
118 |
5825 | 119 endfunction |
120 | |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
121 |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
122 %!assert (setxor ([1,2,3], [2,3,4]), [1,4]) |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
123 %!assert (setxor ({'a'}, {'a', 'b'}), {'b'}) |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
124 |
7920
e56bb65186f6
improve set functions for Matlab compatibility
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
125 %!test |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
126 %! a = [3, 1, 4, 1, 5]; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
127 %! b = [1, 2, 3, 4]; |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
128 %! [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
|
129 %! assert (c, [2; 5]); |
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
130 %! assert (c, sort ([a(ia)'; b(ib)'])); |
9498
f7cc8f30f3b8
Added test for setxor
Pieter Eendebak <pieter.eendebak@gmail.com>
parents:
9481
diff
changeset
|
131 |
18081
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
132 %!test |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
133 %! a = [1 2; 4 5; 1 3]; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
134 %! 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
|
135 %! [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
|
136 %! assert (c, [1 1; 1 3; 2 10]); |
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
137 %! assert (c, sortrows ([a(ia,:); b(ib,:)])); |
42df174ec2ff
setxor.m: Fix bug when "rows" argument given (bug #40808).
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
138 |
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
|
139 %!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
|
140 %!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
|
141 |
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 %!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
|
143 %! [c, ia, ib] = setxor (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
|
144 %! assert (c, 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
|
145 %! assert (ia, 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
|
146 %! 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
|
147 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
148 %!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
|
149 %! [c, ia, ib] = setxor ([], 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
|
150 %! assert (c, 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
|
151 %! 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
|
152 %! assert (ib, 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
|
153 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
154 %!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
|
155 %! 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
|
156 %! [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
|
157 %! 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
|
158 %! 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
|
159 %! 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
|
160 |
d171e23cac81
setxor.m: Fix bug with empty set input and multiple outputs (bug #43140).
Julien Bect <julien.bect@supelec.fr>
parents:
19003
diff
changeset
|
161 %!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
|
162 %! 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
|
163 %! [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
|
164 %! 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
|
165 %! 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
|
166 %! assert (ib, [3; 1; 4; 2]); |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
167 ## Test orientation of output |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
168 %!shared x,y |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
169 %! x = 1:3; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
170 %! y = 2:5; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
171 |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
172 %!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
|
173 %!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
|
174 %!assert (size (setxor (x, y')), [3 1]) |
19003
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
175 %!assert (size (setxor (x', y')), [3 1]) |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
176 |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
177 ## Test multi-dimensional arrays |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
178 %!test |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
179 %! a = rand (3,3,3); |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
180 %! b = a; |
d00f6b09258f
Overhaul functions in scripts/set directory.
Rik <rik@octave.org>
parents:
18081
diff
changeset
|
181 %! b(1,1,1) = 2; |
19974
72ccbd36e23c
Return a column vector by default for Matlab compatibility (bug #44425, bug #44453).
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
182 %! assert (intersect (a, b), sort (a(2:end)')); |
27238
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
183 |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
184 ## Test "legacy" input |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
185 %!test |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
186 %! a = [5 1 3 3 3]; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
187 %! b = [4 1 2 2]; |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
188 %! [c,ia,ib] = setxor (a,b); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
189 %! assert (c, [2, 3, 4, 5]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
190 %! assert (ia, [3; 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
191 %! assert (ib, [3; 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
192 %! [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
|
193 %! assert (c, [2, 3, 4, 5]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
194 %! assert (ia, [5, 1]); |
177be3c01238
setxor.m: Accept a "legacy" flag for Matlab compatibility.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
195 %! assert (ib, [4, 1]); |