[randlib] fix tests
[scilab.git] / scilab / modules / randlib / tests / nonreg_tests / bug_6690.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- CLI SHELL MODE -->
9 //
10 // Set the seed to always get the same random numbers
11 grand("setsd", 0);
12
13 //
14 // 1. Permute some column vectors, and check that the output is basically correct.
15 //
16 // With Complexes.
17 //
18 X = (2:10)';
19 P = grand(5,"prm",X*%i);
20 assert_checkequal ( isreal(P) , %f );
21 assert_checkequal ( typeof(P) , "constant" );
22 assert_checkequal ( size(P) , [9 5] );
23 assert_checkequal ( gsort(P,"r","i") , X*%i*ones(1,5) );
24 //
25 // With Integers.
26 //
27 P = grand(5,"prm",int8(X));
28 assert_checkequal ( typeof(P) , "int8" );
29 assert_checkequal ( size(P) , [9 5] );
30 assert_checkequal ( gsort(P,"r","i") , int8(X)*ones(1,5) );
31 //
32 P = grand(5,"prm",int16(X));
33 assert_checkequal ( typeof(P) , "int16" );
34 assert_checkequal ( size(P) , [9 5] );
35 assert_checkequal ( gsort(P,"r","i") , int16(X)*ones(1,5) );
36 //
37 P = grand(5,"prm",int32(X));
38 assert_checkequal ( typeof(P) , "int32" );
39 assert_checkequal ( size(P) , [9 5] );
40 assert_checkequal ( gsort(P,"r","i") , int32(X)*ones(1,5) );
41 //
42 // With Strings.
43 //
44 X = string(X);
45 P = grand(1,"prm",X);
46 assert_checkequal ( typeof(P) , "string" );
47 assert_checkequal ( size(P) , size(X) );
48 assert_checkequal ( P , ["3" "9" "5" "7" "10" "6" "8" "2" "4"]');
49 //
50 // With Booleans.
51 //
52 X = [%f %t %t %t %t %f]';
53 P = grand(1,"prm",X);
54 assert_checkequal ( typeof(P) , "boolean" );
55 assert_checkequal ( size(P) , size(X) );
56 assert_checkequal ( P , [%t %f %t %t %f %t]' );
57 //
58 // With Polynomials.
59 //
60 s = poly(0,"s");
61 X = [0 s 1+s 1+s^2 s^4]';
62 P = grand(1,"prm",X);
63 assert_checkequal ( typeof(P) , "polynomial" );
64 assert_checkequal ( size(P) , size(X) );
65 assert_checkequal ( P , [1+s^2 1+s s s^4 0]' );
66 //
67 // With Sparses.
68 //
69 X = sparse([1 2 3 0 0 0 0 5 6])';
70 P = grand(1,"prm",X);
71 assert_checkequal ( typeof(P) , "sparse" );
72 assert_checkequal ( size(P) , size(X) );
73 assert_checkequal ( P , sparse([0 0 0 3 5 6 2 1 0])' );
74
75 //
76 // 2. With row vectors / matrices.
77 //
78 X = 2:10;
79 P = grand(1,"prm",X);
80 assert_checkequal ( size(P) , size(X) );
81 assert_checkequal ( gsort(P,"g","i") , X );
82 X(2, :) = 12:20;
83 P = grand(2,"prm",X*%i);
84 refP = [
85 13  9   20  3   10  2   4  5  15
86 19  14  6   18  12  16  7  8  17 ];
87 refP(:, :, 2) = [
88 14  7  8  9   13  10  15  19  4
89 12  5  2  17  6   16  18  3   20 ];
90 assert_checkequal ( size(P) , [size(X) 2] );
91 assert_checkequal ( P, refP*%i );
92 //
93 // With Integers.
94 //
95 X_int = int32(X);
96 P = grand(2,"prm",X_int);
97 refP = int32([
98 5  17  20  7   15  10  2   13  4
99 3  16  8   12  19  9   18  14  6 ]);
100 refP(:, :, 2) = int32([
101 16  13  6  2  20  19  18  14  7
102 9   12  3  8  15  17  10  4   5 ]);
103 assert_checkequal ( size(P) , [size(X_int) 2] );
104 assert_checkequal ( P, refP );
105 //
106 // With Strings.
107 //
108 X_str = string(X);
109 P = grand(2,"prm",X_str);
110 refP = string([
111 19  7   14  10  18  17  5  3  4
112 9   15  2   20  13  12  6  8  16 ]);
113 refP(:, :, 2) = string([
114 13  20  9   6  8   14  3  4   16
115 15  5   19  2  18  12  7  10  17 ]);
116 assert_checkequal ( size(P) , [size(X_str) 2] );
117 assert_checkequal ( P, refP );
118 //
119 // With Hypermatrices.
120 //
121 X(:, :, 2) = X+20;
122 P = grand(2,"prm",X);
123 assert_checkequal ( size(P) , [size(X) 2] );
124 assert_checkequal ( members(P, 2:40), ones(P) );
125 //
126 // Of Complexes.
127 //
128 P = grand(2,"prm",X*%i);
129 assert_checkequal ( size(P) , [size(X) 2] );
130 assert_checkequal ( members(P, (2:40)*%i), ones(P) );
131 //
132 // Of Integers.
133 //
134 P = grand(2,"prm",int16(X));
135 assert_checkequal ( size(P) , [size(X) 2] );
136 assert_checkequal ( members(P, int16(2:40)), ones(P) );
137 //
138 // Of Strings.
139 //
140 Xs = string(X);
141 Ps = grand(2,"prm",Xs);
142 assert_checkequal ( size(Ps) , [size(Xs) 2] );
143 assert_checkequal ( members(Ps, string(2:40)), ones(Ps) );
144 //
145 // Of Booleans.
146 //
147 rand("seed", 0);
148 Xb = floor(10*rand(2, 9, 2));
149 Xb = Xb<5;
150 Pb = grand(2,"prm",Xb);
151 refPb = gsort(Pb+0,"g","i");
152 assert_checkequal ( size(Pb) , [size(Xb) 2] );
153 assert_checkequal ( refPb(1:36), zeros(36, 1) );
154 assert_checkequal ( refPb(37:72), ones(36, 1) );
155 //
156 // Of Ploynomials.
157 //
158 Xp = matrix(X(:)+s, 2, 9, 2);
159 Pp = grand(2,"prm",Xp);
160 refPp = matrix(Pp(:)-s, 2, 9, 2, 2);
161 refPp = gsort(coeff(refPp(:)),"g","i");
162 assert_checkequal ( size(Pp) , [size(Xp) 2] );
163 assert_checkequal ( members(2:40, refPp), 2*([ones(1,9) 0 ones(1,9) 0 ones(1,9) 0 ones(1,9)]) );
164 //
165 // Sparse hypermatrices do not exist yet.
166 //
167
168 //
169 // Bug #6689
170 //
171 X = [%i 1-%i 2+3*%i].';
172 P = grand(4, "prm", X);
173 refP = [
174 2+3*%i  %i      2+3*%i  1-%i
175 %i      2+3*%i  %i      %i
176 1-%i    1-%i    1-%i    2+3*%i ];
177 assert_checkequal ( typeof(P) , "constant" );
178 assert_checkequal ( size(P) , [3 4] );
179 assert_checkequal ( P , refP );
180
181 refMsg = msprintf(_("%s: Wrong type for input argument: Matrix (full or sparse) or Hypermatrix of Reals, Complexes, Integers, Booleans, Strings or Polynomials expected.\n"), "grand");
182 assert_checkerror("grand(2, ""prm"", list())", refMsg);