1551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant//===----------------------------------------------------------------------===// 2551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// 3551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// The LLVM Compiler Infrastructure 4551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// 8551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant//===----------------------------------------------------------------------===// 9551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant 10551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// <random> 11551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant 12551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// template<class IntType = int> 13551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// class discrete_distribution 14551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant 15551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// template<class InputIterator> 16551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant// param_type(InputIterator firstW, InputIterator lastW); 17551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant 18551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant#include <random> 19551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant#include <cassert> 20551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant 21551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnantint main() 22551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant{ 23551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 24551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 25551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 26551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {1}; 27551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0); 28551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 29551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 1); 30551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 1); 31551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 32551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 33551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 34551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 35551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {10}; 36551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+1); 37551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 38551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 1); 39551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 1); 40551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 41551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 42551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 43551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 44551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {10, 30}; 45551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+2); 46551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 47551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 2); 48551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 0.25); 49551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[1] == 0.75); 50551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 51551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 52551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 53551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 54551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {30, 10}; 55551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+2); 56551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 57551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 2); 58551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 0.75); 59551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[1] == 0.25); 60551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 61551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 62551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 63551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 64551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {30, 0, 10}; 65551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+3); 66551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 67551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 3); 68551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 0.75); 69551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[1] == 0); 70551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[2] == 0.25); 71551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 72551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 73551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 74551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 75551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {0, 30, 10}; 76551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+3); 77551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 78551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 3); 79551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 0); 80551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[1] == 0.75); 81551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[2] == 0.25); 82551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 83551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant { 84551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef std::discrete_distribution<> D; 85551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant typedef D::param_type P; 86551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant double p0[] = {0, 0, 10}; 87551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant P pa(p0, p0+3); 88551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant std::vector<double> p = pa.probabilities(); 89551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p.size() == 3); 90551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[0] == 0); 91551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[1] == 0); 92551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant assert(p[2] == 1); 93551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant } 94551d8e4ddb087da09eeb315d5d072c37412544b4Howard Hinnant} 95