* Bugs 15866 & 15867 fixed: setdiff() + 'r'|'c' & integers
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / setdiff.tst
1 // =============================================================================
2 // Scilab ( http://wwwscilaborg/ ) - This file is part of Scilab
3 // Copyright (C) 2009 - DIGITEO - Allan CORNET
4 // Copyright (C) 2018 - Samuel GOUGEON
5 //
6 //  This file is distributed under the same license as the Scilab package
7 // =============================================================================
8 // <-- CLI SHELL MODE -->
9 // <-- NO CHECK REF -->
10 // <-- ENGLISH IMPOSED -->
11 // =============================================================================
12
13 a = [223;111;2;4;2;2];
14 b = [2;3;21;223;123;22];
15 REF_K = [4 ; 2];
16 for f = list(double, int8, uint8, int16, uint16, int32, uint32, int64, uint64)
17     REF_V = f([4 ; 111]);
18     [v,k]= setdiff(f(a), f(b));
19     assert_checkequal(v, REF_V);
20     assert_checkequal(k, REF_K);
21 end
22
23 // =============================================================================
24
25 REF_V = ['111' ; '4'];
26 REF_K = [2; 4];
27 [v,k] = setdiff(string(a),string(b));
28 if and(v == REF_V) <> %t then pause,end
29 if and(k == REF_K) <> %t then pause,end
30
31 // =============================================================================
32 s  = 7;
33 s2 = 5;
34 r  = [14   0  4  7   8  15   7  17  15  12];
35 r2 = [ 2  11  1  0  15   7  10   5];
36 c  = r';
37 c2 = r2';
38 m  = [
39    1  3  2  0  0  0  1  2  1  3
40    1  3  2  1  3  1  2  3  1  0
41 ];
42 m2  = [
43    0  3  1  1  3  2  0  2  0
44    2  0  0  2  2  1  2  2  3
45  ];
46 h = cat(3, m(:,1:6), m2(:,1:6));
47 h2 = cat(3, m([2 1],1:6), m2([2 1],1:6));
48 L  = list(s,  r,  c,  m,  h);
49 L2 = list(s2, r2, c2, m2, h2);
50 msgr = "setdiff: Arguments #1 and #2: Same numbers of columns expected.";
51 msgc = "setdiff: Arguments #1 and #2: Same numbers of rows expected.";
52
53 // With a=[] , orien = none|"r"|"c"
54 // --------------------------------
55 for i = 1:length(L)
56     o = L(i);
57     [va, ka] = setdiff([], o);
58     assert_checkequal(va, []);
59     assert_checkequal(ka, []);
60     [va, ka] = setdiff([], o, "r");
61     assert_checkequal(va, []);
62     assert_checkequal(ka, []);
63     [va, ka] = setdiff([], o, "c");
64     assert_checkequal(va, []);
65     assert_checkequal(ka, []);
66     assert_checkerror("setdiff(o, [], ''r'')", msgr);
67     assert_checkerror("setdiff(o, [], ''c'')", msgc);
68 end
69
70 // "r" and "c" options
71 // -------------------
72 for f = list(double, int8, uint8, int16, uint16, int32, uint32, int64, uint64)
73     // With row vectors
74     [rr,k] = setdiff(f(r), f([r2 0 2]), "r");
75     assert_checkequal(rr, f(r));
76     assert_checkequal(k, 1);
77     [rc,k] = setdiff(f(r), f(r2), "c");
78     assert_checkequal(rc, f([4  8  12  14  17]));
79     assert_checkequal(k,    [3  5  10   1   8]);
80
81     // With column vectors
82     [rc,k] = setdiff(f(r'), f([r2 0 2]'), "c");
83     assert_checkequal(rc, f(r'));
84     assert_checkequal(k, 1);
85     [rr,k] = setdiff(f(r'), f(r2'), "r");
86     assert_checkequal(rr, f([4  8  12  14  17]'));
87     assert_checkequal(k,    [3  5  10   1  8]');
88
89     // With matrices
90     [mc,k] = setdiff(f(m), f(m2), "c");
91     assert_checkequal(mc, f([0  1  2  3
92                              1  1  3  3]));
93     assert_checkequal(k,    [4  1  8  2]);
94     [mr,k] = setdiff(f(m'), f(m2'), "r");
95     assert_checkequal(mr, f([0  1  2  3
96                             1  1  3  3]'));
97     assert_checkequal(k,   [4  1  8  2]');
98
99     // With hypermatrices
100     [hc,k] = setdiff(f(h), f(h2), "c");
101     assert_checkequal(hc, f([0  3
102                              2  2]));
103     assert_checkequal(k,    [7 11]);
104
105     hr  = permute(h, [2 1 3]);
106     h2r = permute(h2,[2 1 3]);
107     [hr,k] = setdiff(f(hr), f(h2r), "r");
108     assert_checkequal(hr, f([0  2
109                              3  2]));
110     assert_checkequal(k,    [7 11]');
111 end