]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/initlist_fun.cc
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 26_numerics / random / piecewise_constant_distribution / cons / initlist_fun.cc
CommitLineData
8e79468d
BK
1// { dg-options "-std=c++0x" }
2//
3// 2008-12-03 Edward M. Smith-Rowland <3dw4rd@verizon.net>
4//
748086b7 5// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
8e79468d
BK
6//
7// This file is part of the GNU ISO C++ Library. This library is free
8// software; you can redistribute it and/or modify it under the
9// terms of the GNU General Public License as published by the
748086b7 10// Free Software Foundation; either version 3, or (at your option)
8e79468d
BK
11// any later version.
12//
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License along
748086b7
JJ
19// with this library; see the file COPYING3. If not see
20// <http://www.gnu.org/licenses/>.
8e79468d
BK
21
22// 26.4.8.5.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst]
23// 26.4.2.4 Concept RandomNumberDistribution [rand.concept.dist]
24
25#include <random>
26#include <cmath>
27#include <testsuite_hooks.h>
28
29struct cosine_distribution
30{
31 cosine_distribution(double x0, double lambda)
32 : _M_x0(x0), _M_lambda(lambda)
33 { }
34
35 double
36 operator()(double x)
37 {
38 if (x - _M_x0 < -_M_lambda / 4)
39 return 0.0;
40 else if (x - _M_x0 > _M_lambda / 4)
41 return 0.0;
42 else
43 return std::cos(2 * M_PI * (x - _M_x0) / _M_lambda);
44 }
45
46private:
47 double _M_x0;
48 double _M_lambda;
49};
50
51void
52test01()
53{
54 bool test __attribute__((unused)) = true;
55
56 cosine_distribution cd(1.5, 3.0);
57 std::piecewise_constant_distribution<> u({-10.0, -8.0, -6.0, -4.0, -2.0,
58 0.0, 2.0, 4.0, 6.0, 8.0, 10.0},
59 cd);
60 std::vector<double> interval = u.intervals();
61 std::vector<double> density = u.densities();
62 VERIFY( interval.size() == 11 );
63 VERIFY( density.size() == 10 );
64}
65
66int main()
67{
68 test01();
69 return 0;
70}