1 // ===================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) ????-2008 - ENPC
5 // Copyright (C) 2008 - DIGITEO - Allan CORNET
6 // Copyright (C) 2012 - Scilab Enterprises - Adeline CARNIS
7 // Copyright (C) 2018 - 2020 - Samuel GOUGEON
9 // This file is distributed under the same license as the Scilab package.
10 // ===================================================================
12 // Included gsort() tests:
13 // * sparse reals (all sizes)
14 // * sparse complex (all sizes), including multi-level sorting
17 // <-- CLI SHELL MODE -->
18 // <-- NO CHECK REF -->
20 // ========================= sparse reals ============================
22 b = [5 1 3 2 4 ; 6 1 2 4 1];
23 c = full(sprand(10,8,0.1));
24 objects = list(b(:)', b(:), b, c(:)', c(:), c);
25 for method = ["g" "lr" "lc" "r" "c" ] //
26 mprintf("\n%s : ", method);
31 [s,k] = gsort(o, method, order);
32 [S,K] = gsort(O, method, order);
33 assert_checktrue(issparse(S));
34 assert_checkequal(full(S), s);
35 assert_checkequal(K, k);
40 // Uniform row, column or matrix of zeros or of ones
41 objects = list(spzeros(1,10), spzeros(10,1), spzeros(6,8))
46 [s, k]= gsort(z, "g");
47 assert_checkequal(s, z);
48 assert_checkequal(k, matrix(1:prod(sz),sz(1),-1));
49 [s, k]= gsort(z, "r");
50 assert_checkequal(k, (1:sz(1))'*ones(1,sz(2)));
51 [s, k]= gsort(z, "c");
52 assert_checkequal(k, ones(sz(1),1)*(1:sz(2)));
53 [s, k]= gsort(z, "lr");
54 assert_checkequal(k, (1:sz(1))');
55 [s, k]= gsort(z, "lc");
56 assert_checkequal(k, 1:sz(2));
60 // ========================== sparse complex =========================
62 // Sparse column of complex numbers (< 2018)
63 // -----------------------------------------
66 B = [1 1+%i 4; -2*%i 3 3-%i];
68 C = [-%i 3*%i;4 9;-2*%i 7];
70 mprintf("\nSparse real:\n");
72 for method = ["g" "r" "c" "lr" "lc"]
73 c = gsort(A(:), method, order);
74 d = full(gsort(A1(:), method, order));
75 assert_checkequal(c, d);
77 c = gsort(B(:), method, order);
78 d = full(gsort(B1(:), method, order));
79 assert_checkequal(c, d);
81 [s,k] = gsort(C(:), method, order);
82 [s1,k1] = gsort(C1(:), method, order);
83 assert_checkequal(full(s1), s);
84 assert_checkequal(k1, k);
88 // Sparse matrix of complex numbers
89 // --------------------------------
90 c0 = sprand(50,10,0.2) + imult(sprand(50,10,0.2));
91 objects = list(c0(:).', c0(:), c0);
92 Crit = list(list(abs, atan), list(real, imag));
93 Orders = ["i" "i" ; "i" "d"];
94 mprintf("\nSparse complex:\n");
95 for method = ["g" "r" "c" "lr" "lc"]
96 mprintf("\n%s : ", method);
101 mprintf("%s ", strcat(order));
102 S = gsort(O, method, order, crit);
103 s = gsort(full(O), method, order, crit);
104 assert_checktrue(issparse(S));
105 assert_checkequal(s, full(S));
107 [S, K] = gsort(O, method, order, crit);
108 [s, k] = gsort(full(O), method, order, crit);
109 assert_checktrue(issparse(S));
110 assert_checkequal(K, k);
111 assert_checkequal(s, full(S));
116 // ========================= sparse boolean =========================
118 b = sprand(10,500,0.1) > 0;
119 objects = list(b(:)', b(:), b);
120 mprintf("\nSparse booleans:\n");
121 for method = ["g" "r" "c" "lr" "lc"]
122 mprintf("\n%s : ", method);
124 for order = ["i" "d"]
125 mprintf("%s ", order);
126 [S, K] = gsort(O, method, order);
127 [s, k] = gsort(full(O), method, order);
128 assert_checktrue(issparse(S));
129 assert_checkequal(K, k);
130 assert_checkequal(full(S), s);
132 S = gsort(O, method, order);
133 assert_checktrue(issparse(S));
134 assert_checkequal(full(S), s);