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 IntType = int>
13// class discrete_distribution
14
15// template<class InputIterator>
16//     discrete_distribution(InputIterator firstW, InputIterator lastW);
17
18#include <random>
19#include <cassert>
20
21int main()
22{
23    {
24        typedef std::discrete_distribution<> D;
25        double p0[] = {1};
26        D d(p0, p0);
27        std::vector<double> p = d.probabilities();
28        assert(p.size() == 1);
29        assert(p[0] == 1);
30    }
31    {
32        typedef std::discrete_distribution<> D;
33        double p0[] = {10};
34        D d(p0, p0+1);
35        std::vector<double> p = d.probabilities();
36        assert(p.size() == 1);
37        assert(p[0] == 1);
38    }
39    {
40        typedef std::discrete_distribution<> D;
41        double p0[] = {10, 30};
42        D d(p0, p0+2);
43        std::vector<double> p = d.probabilities();
44        assert(p.size() == 2);
45        assert(p[0] == 0.25);
46        assert(p[1] == 0.75);
47    }
48    {
49        typedef std::discrete_distribution<> D;
50        double p0[] = {30, 10};
51        D d(p0, p0+2);
52        std::vector<double> p = d.probabilities();
53        assert(p.size() == 2);
54        assert(p[0] == 0.75);
55        assert(p[1] == 0.25);
56    }
57    {
58        typedef std::discrete_distribution<> D;
59        double p0[] = {30, 0, 10};
60        D d(p0, p0+3);
61        std::vector<double> p = d.probabilities();
62        assert(p.size() == 3);
63        assert(p[0] == 0.75);
64        assert(p[1] == 0);
65        assert(p[2] == 0.25);
66    }
67    {
68        typedef std::discrete_distribution<> D;
69        double p0[] = {0, 30, 10};
70        D d(p0, p0+3);
71        std::vector<double> p = d.probabilities();
72        assert(p.size() == 3);
73        assert(p[0] == 0);
74        assert(p[1] == 0.75);
75        assert(p[2] == 0.25);
76    }
77    {
78        typedef std::discrete_distribution<> D;
79        double p0[] = {0, 0, 10};
80        D d(p0, p0+3);
81        std::vector<double> p = d.probabilities();
82        assert(p.size() == 3);
83        assert(p[0] == 0);
84        assert(p[1] == 0);
85        assert(p[2] == 1);
86    }
87}
88