1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <random>
11
12 // template<class RealType, size_t bits, class URNG>
13 // RealType generate_canonical(URNG& g);
14
15 #include <random>
16 #include <cassert>
17
main()18 int main()
19 {
20 {
21 typedef std::minstd_rand0 E;
22 typedef float F;
23 E r;
24 F f = std::generate_canonical<F, 0>(r);
25 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
26 }
27 {
28 typedef std::minstd_rand0 E;
29 typedef float F;
30 E r;
31 F f = std::generate_canonical<F, 1>(r);
32 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
33 }
34 {
35 typedef std::minstd_rand0 E;
36 typedef float F;
37 E r;
38 F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r);
39 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
40 }
41 {
42 typedef std::minstd_rand0 E;
43 typedef float F;
44 E r;
45 F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r);
46 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
47 }
48 {
49 typedef std::minstd_rand0 E;
50 typedef float F;
51 E r;
52 F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r);
53 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
54 }
55
56 {
57 typedef std::minstd_rand0 E;
58 typedef double F;
59 E r;
60 F f = std::generate_canonical<F, 0>(r);
61 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
62 }
63 {
64 typedef std::minstd_rand0 E;
65 typedef double F;
66 E r;
67 F f = std::generate_canonical<F, 1>(r);
68 assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1)));
69 }
70 {
71 typedef std::minstd_rand0 E;
72 typedef double F;
73 E r;
74 F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r);
75 assert(f ==
76 (16807 - E::min() +
77 (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
78 ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1))));
79 }
80 {
81 typedef std::minstd_rand0 E;
82 typedef double F;
83 E r;
84 F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r);
85 assert(f ==
86 (16807 - E::min() +
87 (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
88 ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1))));
89 }
90 {
91 typedef std::minstd_rand0 E;
92 typedef double F;
93 E r;
94 F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r);
95 assert(f ==
96 (16807 - E::min() +
97 (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
98 ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1))));
99 }
100 }
101