48 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// REQUIRES: long_tests10 11// <random>12 13// template<class IntType = int>14// class discrete_distribution15 16// template<class _URNG> result_type operator()(_URNG& g, const param_type& parm);17 18#include <cassert>19#include <cstdlib>20#include <random>21#include <vector>22 23int main(int, char**)24{25 {26 typedef std::discrete_distribution<> D;27 typedef D::param_type P;28 typedef std::minstd_rand G;29 G g;30 D d;31 double p0[] = {.3, .1, .6};32 P p(p0, p0+3);33 const int N = 10000000;34 std::vector<D::result_type> u(3);35 for (int i = 0; i < N; ++i)36 {37 D::result_type v = d(g, p);38 assert(0 <= v && v <= 2);39 u[v]++;40 }41 std::vector<double> prob = p.probabilities();42 for (int i = 0; i <= 2; ++i)43 assert(std::abs((double)u[i]/N - prob[i]) / prob[i] < 0.001);44 }45 46 return 0;47}48