2509d019bad3b8082daa90d84b641bc11c6e15ef
[scilab.git] / scilab / modules / statistics / tests / unit_tests / histc.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 //<-- NO CHECK REF -->
10
11 rand("seed", 0);
12 d = rand(1, 10000, "normal");
13 [cfC, indC] = histc(20, d);
14
15 refCF = [
16    0.0002572096
17    0.00102883842
18    0.00514419209
19    0.00925954575
20    0.02700700845
21    0.07356194682
22    0.12860480213
23    0.20576768341
24    0.30376454264
25    0.36472321885
26    0.39713162899
27    0.36317996123
28    0.28987522401
29    0.19033510716
30    0.11008571063
31    0.06121588582
32    0.02674979884
33    0.01028838417
34    0.00282930565
35    0.00128604802
36 ]';
37 assert_checkequal(size(indC), [1 10000]);
38 assert_checkalmostequal(cfC, refCF,1e-7);
39 [cfC, indC] = histc(int32(20), d);
40 assert_checkequal(size(indC), [1 10000]);
41 assert_checkalmostequal(cfC, refCF, 1e-7);
42
43 // Same test, without normalization
44 [cfC, indC] = histc(20, d, normalization=%f);
45
46 refCF = [
47 1
48 4
49 20
50 36
51 105
52 286
53 500
54 800
55 1181
56 1418
57 1544
58 1412
59 1127
60 740
61 428
62 238
63 104
64 40
65 11
66 5 ]';
67 assert_checkequal(size(indC), [1 10000]);
68 assert_checkequal(cfC, refCF);
69 [cfC, indC] = histc(int16(20), d, normalization=%f);
70 assert_checkequal(size(indC), [1 10000]);
71 assert_checkequal(cfC, refCF);
72
73
74 // With x instead of n as first argument
75 cfC = histc([-5 0 5], d);
76 refCF = [0.09982   0.10018];
77 assert_checkequal(cfC, refCF);
78 cfC = histc(int8([-5 0 5]), d);
79 assert_checkequal(cfC, refCF);
80 cfC = histc(int16([-5 0 5]), d);
81 assert_checkequal(cfC, refCF);
82 cfC = histc(int32([-5 0 5]), d);
83 assert_checkequal(cfC, refCF);
84 cfC = histc([-5 0 5], d, %f);
85 assert_checkequal(sum(cfC), 10000); // -5 > d > 5, and d has 10000 elements.
86
87
88
89 lambda = 2;
90 grand("setsd", 0);
91 D = grand(100000, 1, "exp", 1/lambda);
92 [cfC, indC] = histc(40, D);
93
94 refCF = [
95    1.6987118D+00
96    1.2440861D+00
97    9.0843138D-01
98    6.5661150D-01
99    4.8963575D-01
100    3.5287585D-01
101    2.5718177D-01
102    1.9447913D-01
103    1.4149098D-01
104    9.7271105D-02
105    7.3615681D-02
106    5.0401824D-02
107    3.8416409D-02
108    2.8512672D-02
109    2.1447585D-02
110    1.4634823D-02
111    1.0660711D-02
112    8.2005472D-03
113    5.8665453D-03
114    4.2895170D-03
115    4.1633547D-03
116    1.3877849D-03
117    1.4508660D-03
118    9.4621698D-04
119    7.5697358D-04
120    7.5697358D-04
121    4.4156792D-04
122    3.1540566D-04
123    2.5232453D-04
124    1.8924340D-04
125    6.3081132D-05
126    1.8924340D-04
127    1.2616226D-04
128    6.3081132D-05
129    6.3081132D-05
130    0.0000000D+00
131    0.0000000D+00
132    6.3081132D-05
133    0.0000000D+00
134    6.3081132D-05
135  ]';
136 assert_checkequal(size(indC), [100000 1]);
137 assert_checkalmostequal(cfC, refCF, 1e-7);
138 [cfC, indC] = histc(int8(40), D);
139 assert_checkequal(size(indC), [100000 1]);
140 assert_checkalmostequal(cfC, refCF, 1e-7);
141
142 // Same test, without normalization
143 [cfC, indC] = histc(40, D, normalization=%f);
144
145 refCF = [
146 26929
147 19722
148 14401
149 10409
150 7762
151 5594
152 4077
153 3083
154 2243
155 1542
156 1167
157 799
158 609
159 452
160 340
161 232
162 169
163 130
164 93
165 68
166 66
167 22
168 23
169 15
170 12
171 12
172 7
173 5
174 4
175 3
176 1
177 3
178 2
179 1
180 1
181 0
182 0
183 1
184 0
185 1 ]';
186 assert_checkequal(size(indC), [100000 1]);
187 assert_checkalmostequal(cfC, refCF);
188 [cfC, indC] = histc(int32(40), D, normalization=%f);
189 assert_checkequal(size(indC), [100000 1]);
190 assert_checkalmostequal(cfC, refCF);
191
192 // With x instead of n as first argument
193 cfC = histc([0 7], D);
194 refCF = 1/7;
195 assert_checkalmostequal(cfC, refCF);
196 cfC = histc(int8([0 7]), D);
197 assert_checkalmostequal(cfC, refCF);
198 cfC = histc(int16([0 7]), D);
199 assert_checkalmostequal(cfC, refCF);
200 cfC = histc(int32([0 7]), D);
201 assert_checkalmostequal(cfC, refCF);
202 cfC = histc([0 7], D, %f);
203 assert_checkequal(cfC, 100000); // 0 > D > 7, and D has 100000 elements.
204
205 // Error checks
206 refMsg = msprintf(_("%s: Wrong number of input argument(s): At least %d expected.\n"), "histc", 2);
207 assert_checkerror("histc(1)", refMsg);
208 assert_checkerror("histc()", refMsg);
209
210 refMsg = msprintf(_("%s: Wrong type of input argument #%d: A single boolean expected.\n"), "histc", 3);
211 assert_checkerror("histc(1, 1, normalization=[%t %t])", refMsg);
212 assert_checkerror("histc(1, 1, [%t %t])", refMsg);
213 assert_checkerror("histc(1, 1, """")", refMsg);
214 assert_checkerror("histc(1, 1, 1)", refMsg);
215
216 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the interval %s.\n"), "histc", 1, "[1, oo)");
217 assert_checkerror("histc(0, 1, %t)", refMsg);
218 assert_checkerror("histc(-1, 1)", refMsg);
219
220 refMsg = msprintf(_("%s: Wrong type for input argument #%d: Integer expected.\n"), "histc", 1);
221 assert_checkerror("histc(1.5, 1, %t)", refMsg);
222
223 refMsg = msprintf(_("%s: Wrong values for input argument #%d: Elements must be in increasing order.\n"), "histc", 1);
224 assert_checkerror("histc([2 1], 1, %t)", refMsg);
225 assert_checkerror("histc([1 1], 1, %t)", refMsg);
226
227 refMsg = msprintf(_("%s: Wrong type for input argument #%d: A real matrix expected.\n"), "histc", 1);
228 assert_checkerror("histc(list(), 1)", refMsg);
229 assert_checkerror("histc("""", 1)", refMsg);
230 assert_checkerror("histc(%t, 1)", refMsg);
231 refMsg = msprintf(_("%s: Wrong type for input argument #%d: A real matrix expected.\n"), "histc", 2);
232 assert_checkerror("histc(1, list())", refMsg);
233 assert_checkerror("histc(1, """")", refMsg);
234 assert_checkerror("histc(1, %t)", refMsg);