331fa85b310c8f0f47262b7b70bd59fddc2a37b2
[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 rand("seed", 0);
12 grand("setsd", 0);
13
14 //
15 // 1. Permute some column vectors, and check that the output is basically correct.
16 //
17 // With Complexes.
18 //
19 X = (2:10)';
20 P = grand(5,"prm",X*%i);
21 assert_checkequal ( isreal(P) , %f );
22 assert_checkequal ( typeof(P) , "constant" );
23 assert_checkequal ( size(P) , [9 5] );
24 assert_checkequal ( gsort(P,"r","i") , X*%i*ones(1,5) );
25 //
26 // With Integers.
27 //
28 P = grand(5,"prm",int8(X));
29 assert_checkequal ( typeof(P) , "int8" );
30 assert_checkequal ( size(P) , [9 5] );
31 assert_checkequal ( gsort(P,"r","i") , int8(X)*ones(1,5) );
32 //
33 P = grand(5,"prm",int16(X));
34 assert_checkequal ( typeof(P) , "int16" );
35 assert_checkequal ( size(P) , [9 5] );
36 assert_checkequal ( gsort(P,"r","i") , int16(X)*ones(1,5) );
37 //
38 P = grand(5,"prm",int32(X));
39 assert_checkequal ( typeof(P) , "int32" );
40 assert_checkequal ( size(P) , [9 5] );
41 assert_checkequal ( gsort(P,"r","i") , int32(X)*ones(1,5) );
42 //
43 // With Strings.
44 //
45 X = string(X);
46 P = grand(1,"prm",X);
47 assert_checkequal ( typeof(P) , "string" );
48 assert_checkequal ( size(P) , size(X) );
49 assert_checkequal ( P , ["3" "9" "5" "7" "10" "6" "8" "2" "4"]');
50 //
51 // With Booleans.
52 //
53 X = [%f %t %t %t %t %f]';
54 P = grand(1,"prm",X);
55 assert_checkequal ( typeof(P) , "boolean" );
56 assert_checkequal ( size(P) , size(X) );
57 assert_checkequal ( P , [%t %f %t %t %f %t]' );
58 //
59 // With Polynomials.
60 //
61 s = poly(0,"s");
62 X = [0 s 1+s 1+s^2 s^4]';
63 P = grand(1,"prm",X);
64 assert_checkequal ( typeof(P) , "polynomial" );
65 assert_checkequal ( size(P) , size(X) );
66 assert_checkequal ( P , [1+s^2 1+s s s^4 0]' );
67 //
68 // With Sparses.
69 //
70 X = sparse([1 2 3 0 0 0 0 5 6])';
71 P = grand(1,"prm",X);
72 assert_checkequal ( typeof(P) , "sparse" );
73 assert_checkequal ( size(P) , size(X) );
74 assert_checkequal ( P , sparse([0 0 0 3 5 6 2 1 0])' );
75
76 //
77 // 2. With row vectors / matrices.
78 //
79 X = 2:10;
80 P = grand(1,"prm",X);
81 assert_checkequal ( size(P) , size(X) );
82 assert_checkequal ( gsort(P,"g","i") , X );
83 X(2, :) = 12:20;
84 P = grand(2,"prm",X*%i);
85 refP = [
86 13  9   20  3   10  2   4  5  15
87 19  14  6   18  12  16  7  8  17 ];
88 refP(:, :, 2) = [
89 14  7  8  9   13  10  15  19  4
90 12  5  2  17  6   16  18  3   20 ];
91 assert_checkequal ( size(P) , [size(X) 2] );
92 assert_checkequal ( P, refP*%i );
93 //
94 // With Integers.
95 //
96 X_int = int32(X);
97 P = grand(2,"prm",X_int);
98 refP = int32([
99 5  17  20  7   15  10  2   13  4
100 3  16  8   12  19  9   18  14  6 ]);
101 refP(:, :, 2) = int32([
102 16  13  6  2  20  19  18  14  7
103 9   12  3  8  15  17  10  4   5 ]);
104 assert_checkequal ( size(P) , [size(X_int) 2] );
105 assert_checkequal ( P, refP );
106 //
107 // With Strings.
108 //
109 X_str = string(X);
110 P = grand(2,"prm",X_str);
111 refP = string([
112 19  7   14  10  18  17  5  3  4
113 9   15  2   20  13  12  6  8  16 ]);
114 refP(:, :, 2) = string([
115 13  20  9   6  8   14  3  4   16
116 15  5   19  2  18  12  7  10  17 ]);
117 assert_checkequal ( size(P) , [size(X_str) 2] );
118 assert_checkequal ( P, refP );
119 //
120 // With Hypermatrices.
121 //
122 X(:, :, 2) = X+20;
123 P = grand(2,"prm",X);
124 assert_checkequal ( size(P) , [size(X) 2] );
125 assert_checkequal ( members(P, 2:40), ones(P) );
126 //
127 // Of Complexes.
128 //
129 P = grand(2,"prm",X*%i);
130 assert_checkequal ( size(P) , [size(X) 2] );
131 assert_checkequal ( members(P, (2:40)*%i), ones(P) );
132 //
133 // Of Integers.
134 //
135 P = grand(2,"prm",int16(X));
136 assert_checkequal ( size(P) , [size(X) 2] );
137 assert_checkequal ( members(P, int16(2:40)), ones(P) );
138 //
139 // Of Strings.
140 //
141 Xs = string(X);
142 Ps = grand(2,"prm",Xs);
143 assert_checkequal ( size(Ps) , [size(Xs) 2] );
144 assert_checkequal ( members(Ps, string(2:40)), ones(Ps) );
145 //
146 // Of Booleans.
147 //
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);