1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <random>
10 
11 // template<class IntType = int>
12 // class discrete_distribution
13 
14 // template<class InputIterator>
15 //     discrete_distribution(InputIterator firstW, InputIterator lastW);
16 
17 #include <random>
18 
19 #include <cassert>
20 #include <vector>
21 
22 #include "test_macros.h"
23 
main(int,char **)24 int main(int, char**)
25 {
26     {
27         typedef std::discrete_distribution<> D;
28         double p0[] = {1};
29         D d(p0, p0);
30         std::vector<double> p = d.probabilities();
31         assert(p.size() == 1);
32         assert(p[0] == 1);
33     }
34     {
35         typedef std::discrete_distribution<> D;
36         double p0[] = {10};
37         D d(p0, p0+1);
38         std::vector<double> p = d.probabilities();
39         assert(p.size() == 1);
40         assert(p[0] == 1);
41     }
42     {
43         typedef std::discrete_distribution<> D;
44         double p0[] = {10, 30};
45         D d(p0, p0+2);
46         std::vector<double> p = d.probabilities();
47         assert(p.size() == 2);
48         assert(p[0] == 0.25);
49         assert(p[1] == 0.75);
50     }
51     {
52         typedef std::discrete_distribution<> D;
53         double p0[] = {30, 10};
54         D d(p0, p0+2);
55         std::vector<double> p = d.probabilities();
56         assert(p.size() == 2);
57         assert(p[0] == 0.75);
58         assert(p[1] == 0.25);
59     }
60     {
61         typedef std::discrete_distribution<> D;
62         double p0[] = {30, 0, 10};
63         D d(p0, p0+3);
64         std::vector<double> p = d.probabilities();
65         assert(p.size() == 3);
66         assert(p[0] == 0.75);
67         assert(p[1] == 0);
68         assert(p[2] == 0.25);
69     }
70     {
71         typedef std::discrete_distribution<> D;
72         double p0[] = {0, 30, 10};
73         D d(p0, p0+3);
74         std::vector<double> p = d.probabilities();
75         assert(p.size() == 3);
76         assert(p[0] == 0);
77         assert(p[1] == 0.75);
78         assert(p[2] == 0.25);
79     }
80     {
81         typedef std::discrete_distribution<> D;
82         double p0[] = {0, 0, 10};
83         D d(p0, p0+3);
84         std::vector<double> p = d.probabilities();
85         assert(p.size() == 3);
86         assert(p[0] == 0);
87         assert(p[1] == 0);
88         assert(p[2] == 1);
89     }
90 
91   return 0;
92 }
93