1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // REQUIRES: long_tests
14 // template<class _IntType = int>
15 // class uniform_int_distribution
17 // template<class _URNG> result_type operator()(_URNG& g);
35 typedef std::uniform_int_distribution<> D;
36 typedef std::minstd_rand0 G;
40 std::vector<D::result_type> u;
41 for (int i = 0; i < N; ++i)
43 D::result_type v = d(g);
44 assert(d.a() <= v && v <= d.b());
47 double mean = std::accumulate(u.begin(), u.end(),
48 double(0)) / u.size();
52 for (int i = 0; i < u.size(); ++i)
54 double dbl = (u[i] - mean);
61 double dev = std::sqrt(var);
62 skew /= u.size() * dev * var;
63 kurtosis /= u.size() * var * var;
65 double x_mean = ((double)d.a() + d.b()) / 2;
66 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
68 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
69 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
70 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
71 assert(std::abs((var - x_var) / x_var) < 0.01);
72 assert(std::abs(skew - x_skew) < 0.01);
73 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
76 typedef std::uniform_int_distribution<> D;
77 typedef std::minstd_rand G;
81 std::vector<D::result_type> u;
82 for (int i = 0; i < N; ++i)
84 D::result_type v = d(g);
85 assert(d.a() <= v && v <= d.b());
88 double mean = std::accumulate(u.begin(), u.end(),
89 double(0)) / u.size();
93 for (int i = 0; i < u.size(); ++i)
95 double dbl = (u[i] - mean);
102 double dev = std::sqrt(var);
103 skew /= u.size() * dev * var;
104 kurtosis /= u.size() * var * var;
106 double x_mean = ((double)d.a() + d.b()) / 2;
107 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
109 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
110 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
111 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
112 assert(std::abs((var - x_var) / x_var) < 0.01);
113 assert(std::abs(skew - x_skew) < 0.01);
114 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
117 typedef std::uniform_int_distribution<> D;
118 typedef std::mt19937 G;
121 const int N = 100000;
122 std::vector<D::result_type> u;
123 for (int i = 0; i < N; ++i)
125 D::result_type v = d(g);
126 assert(d.a() <= v && v <= d.b());
129 double mean = std::accumulate(u.begin(), u.end(),
130 double(0)) / u.size();
134 for (int i = 0; i < u.size(); ++i)
136 double dbl = (u[i] - mean);
137 double d2 = sqr(dbl);
143 double dev = std::sqrt(var);
144 skew /= u.size() * dev * var;
145 kurtosis /= u.size() * var * var;
147 double x_mean = ((double)d.a() + d.b()) / 2;
148 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
150 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
151 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
152 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
153 assert(std::abs((var - x_var) / x_var) < 0.01);
154 assert(std::abs(skew - x_skew) < 0.01);
155 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
158 typedef std::uniform_int_distribution<> D;
159 typedef std::mt19937_64 G;
162 const int N = 100000;
163 std::vector<D::result_type> u;
164 for (int i = 0; i < N; ++i)
166 D::result_type v = d(g);
167 assert(d.a() <= v && v <= d.b());
170 double mean = std::accumulate(u.begin(), u.end(),
171 double(0)) / u.size();
175 for (int i = 0; i < u.size(); ++i)
177 double dbl = (u[i] - mean);
178 double d2 = sqr(dbl);
184 double dev = std::sqrt(var);
185 skew /= u.size() * dev * var;
186 kurtosis /= u.size() * var * var;
188 double x_mean = ((double)d.a() + d.b()) / 2;
189 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
191 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
192 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
193 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
194 assert(std::abs((var - x_var) / x_var) < 0.01);
195 assert(std::abs(skew - x_skew) < 0.01);
196 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
199 typedef std::uniform_int_distribution<> D;
200 typedef std::ranlux24_base G;
203 const int N = 100000;
204 std::vector<D::result_type> u;
205 for (int i = 0; i < N; ++i)
207 D::result_type v = d(g);
208 assert(d.a() <= v && v <= d.b());
211 double mean = std::accumulate(u.begin(), u.end(),
212 double(0)) / u.size();
216 for (int i = 0; i < u.size(); ++i)
218 double dbl = (u[i] - mean);
219 double d2 = sqr(dbl);
225 double dev = std::sqrt(var);
226 skew /= u.size() * dev * var;
227 kurtosis /= u.size() * var * var;
229 double x_mean = ((double)d.a() + d.b()) / 2;
230 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
232 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
233 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
234 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
235 assert(std::abs((var - x_var) / x_var) < 0.01);
236 assert(std::abs(skew - x_skew) < 0.01);
237 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
240 typedef std::uniform_int_distribution<> D;
241 typedef std::ranlux48_base G;
244 const int N = 100000;
245 std::vector<D::result_type> u;
246 for (int i = 0; i < N; ++i)
248 D::result_type v = d(g);
249 assert(d.a() <= v && v <= d.b());
252 double mean = std::accumulate(u.begin(), u.end(),
253 double(0)) / u.size();
257 for (int i = 0; i < u.size(); ++i)
259 double dbl = (u[i] - mean);
260 double d2 = sqr(dbl);
266 double dev = std::sqrt(var);
267 skew /= u.size() * dev * var;
268 kurtosis /= u.size() * var * var;
270 double x_mean = ((double)d.a() + d.b()) / 2;
271 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
273 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
274 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
275 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
276 assert(std::abs((var - x_var) / x_var) < 0.01);
277 assert(std::abs(skew - x_skew) < 0.01);
278 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
281 typedef std::uniform_int_distribution<> D;
282 typedef std::ranlux24 G;
285 const int N = 100000;
286 std::vector<D::result_type> u;
287 for (int i = 0; i < N; ++i)
289 D::result_type v = d(g);
290 assert(d.a() <= v && v <= d.b());
293 double mean = std::accumulate(u.begin(), u.end(),
294 double(0)) / u.size();
298 for (int i = 0; i < u.size(); ++i)
300 double dbl = (u[i] - mean);
301 double d2 = sqr(dbl);
307 double dev = std::sqrt(var);
308 skew /= u.size() * dev * var;
309 kurtosis /= u.size() * var * var;
311 double x_mean = ((double)d.a() + d.b()) / 2;
312 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
314 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
315 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
316 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
317 assert(std::abs((var - x_var) / x_var) < 0.01);
318 assert(std::abs(skew - x_skew) < 0.01);
319 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
322 typedef std::uniform_int_distribution<> D;
323 typedef std::ranlux48 G;
326 const int N = 100000;
327 std::vector<D::result_type> u;
328 for (int i = 0; i < N; ++i)
330 D::result_type v = d(g);
331 assert(d.a() <= v && v <= d.b());
334 double mean = std::accumulate(u.begin(), u.end(),
335 double(0)) / u.size();
339 for (int i = 0; i < u.size(); ++i)
341 double dbl = (u[i] - mean);
342 double d2 = sqr(dbl);
348 double dev = std::sqrt(var);
349 skew /= u.size() * dev * var;
350 kurtosis /= u.size() * var * var;
352 double x_mean = ((double)d.a() + d.b()) / 2;
353 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
355 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
356 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
357 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
358 assert(std::abs((var - x_var) / x_var) < 0.01);
359 assert(std::abs(skew - x_skew) < 0.01);
360 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
363 typedef std::uniform_int_distribution<> D;
364 typedef std::knuth_b G;
367 const int N = 100000;
368 std::vector<D::result_type> u;
369 for (int i = 0; i < N; ++i)
371 D::result_type v = d(g);
372 assert(d.a() <= v && v <= d.b());
375 double mean = std::accumulate(u.begin(), u.end(),
376 double(0)) / u.size();
380 for (int i = 0; i < u.size(); ++i)
382 double dbl = (u[i] - mean);
383 double d2 = sqr(dbl);
389 double dev = std::sqrt(var);
390 skew /= u.size() * dev * var;
391 kurtosis /= u.size() * var * var;
393 double x_mean = ((double)d.a() + d.b()) / 2;
394 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
396 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
397 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
398 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
399 assert(std::abs((var - x_var) / x_var) < 0.01);
400 assert(std::abs(skew - x_skew) < 0.01);
401 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
404 typedef std::uniform_int_distribution<> D;
405 typedef std::minstd_rand0 G;
408 for (int i = 0; i < 10000; ++i)
411 assert(-6 <= u && u <= 106);
415 typedef std::uniform_int_distribution<> D;
416 typedef std::minstd_rand G;
419 const int N = 100000;
420 std::vector<D::result_type> u;
421 for (int i = 0; i < N; ++i)
423 D::result_type v = d(g);
424 assert(d.a() <= v && v <= d.b());
427 double mean = std::accumulate(u.begin(), u.end(),
428 double(0)) / u.size();
432 for (int i = 0; i < u.size(); ++i)
434 double dbl = (u[i] - mean);
435 double d2 = sqr(dbl);
441 double dev = std::sqrt(var);
442 skew /= u.size() * dev * var;
443 kurtosis /= u.size() * var * var;
445 double x_mean = ((double)d.a() + d.b()) / 2;
446 double x_var = (sqr((double)d.b() - d.a() + 1) - 1) / 12;
448 double x_kurtosis = -6. * (sqr((double)d.b() - d.a() + 1) + 1) /
449 (5. * (sqr((double)d.b() - d.a() + 1) - 1));
450 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
451 assert(std::abs((var - x_var) / x_var) < 0.01);
452 assert(std::abs(skew - x_skew) < 0.01);
453 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);