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 = double> 13 // class piecewise_linear_distribution 14 15 // template<class InputIterator> 16 // param_type(InputIteratorB firstB, InputIteratorB lastB, 17 // InputIteratorW firstW); 18 19 #include <random> 20 #include <cassert> 21 22 int main() 23 { 24 { 25 typedef std::piecewise_linear_distribution<> D; 26 typedef D::param_type P; 27 double b[] = {10}; 28 double p[] = {12}; 29 P pa(b, b, p); 30 std::vector<double> iv = pa.intervals(); 31 assert(iv.size() == 2); 32 assert(iv[0] == 0); 33 assert(iv[1] == 1); 34 std::vector<double> dn = pa.densities(); 35 assert(dn.size() == 2); 36 assert(dn[0] == 1); 37 assert(dn[1] == 1); 38 } 39 { 40 typedef std::piecewise_linear_distribution<> D; 41 typedef D::param_type P; 42 double b[] = {10}; 43 double p[] = {12}; 44 P pa(b, b+1, p); 45 std::vector<double> iv = pa.intervals(); 46 assert(iv.size() == 2); 47 assert(iv[0] == 0); 48 assert(iv[1] == 1); 49 std::vector<double> dn = pa.densities(); 50 assert(dn.size() == 2); 51 assert(dn[0] == 1); 52 assert(dn[1] == 1); 53 } 54 { 55 typedef std::piecewise_linear_distribution<> D; 56 typedef D::param_type P; 57 double b[] = {10, 15}; 58 double p[] = {12, 12}; 59 P pa(b, b+2, p); 60 std::vector<double> iv = pa.intervals(); 61 assert(iv.size() == 2); 62 assert(iv[0] == 10); 63 assert(iv[1] == 15); 64 std::vector<double> dn = pa.densities(); 65 assert(dn.size() == 2); 66 assert(dn[0] == 1/5.); 67 assert(dn[1] == 1/5.); 68 } 69 { 70 typedef std::piecewise_linear_distribution<> D; 71 typedef D::param_type P; 72 double b[] = {10, 15, 16}; 73 double p[] = {.25, .75, .25}; 74 P pa(b, b+3, p); 75 std::vector<double> iv = pa.intervals(); 76 assert(iv.size() == 3); 77 assert(iv[0] == 10); 78 assert(iv[1] == 15); 79 assert(iv[2] == 16); 80 std::vector<double> dn = pa.densities(); 81 assert(dn.size() == 3); 82 assert(dn[0] == .25/3); 83 assert(dn[1] == .75/3); 84 assert(dn[2] == .25/3); 85 } 86 { 87 typedef std::piecewise_linear_distribution<> D; 88 typedef D::param_type P; 89 double b[] = {10, 14, 16, 17}; 90 double p[] = {0, 1, 1, 0}; 91 P pa(b, b+4, p); 92 std::vector<double> iv = pa.intervals(); 93 assert(iv.size() == 4); 94 assert(iv[0] == 10); 95 assert(iv[1] == 14); 96 assert(iv[2] == 16); 97 assert(iv[3] == 17); 98 std::vector<double> dn = pa.densities(); 99 assert(dn.size() == 4); 100 assert(dn[0] == 0); 101 assert(dn[1] == 1/4.5); 102 assert(dn[2] == 1/4.5); 103 assert(dn[3] == 0); 104 } 105 } 106