3 // Copyright (C) 2011 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the terms
7 // of the GNU General Public License as published by the Free Software
8 // Foundation; either version 3, or (at your option) any later
11 // This library is distributed in the hope that it will be useful, but
12 // WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
21 * @file testsuite_random.h
24 #ifndef _GLIBCXX_TESTSUITE_RANDOM_H
25 #define _GLIBCXX_TESTSUITE_RANDOM_H
28 #include <testsuite_hooks.h>
32 // Adapted for libstdc++ from GNU gsl-1.14/randist/test.c
33 // Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007, 2010
34 // James Theiler, Brian Gough
35 template<unsigned long BINS
= 100,
36 unsigned long N
= 100000,
37 typename Distribution
, typename Pdf
>
39 testDiscreteDist(Distribution
& f
, Pdf pdf
)
41 bool test
__attribute__((unused
)) = true;
42 double count
[BINS
], p
[BINS
];
44 for (unsigned long i
= 0; i
< BINS
; i
++)
47 for (unsigned long i
= 0; i
< N
; i
++)
50 if (r
>= 0 && r
< BINS
)
54 for (unsigned long i
= 0; i
< BINS
; i
++)
57 for (unsigned long i
= 0; i
< BINS
; i
++)
60 double d
= std::abs(count
[i
] - N
* p
[i
]);
64 double s
= d
/ std::sqrt(N
* p
[i
]);
65 status_i
= (s
> 5) && (d
> 1);
68 status_i
= (count
[i
] != 0);
75 bernoulli_pdf(int k
, double p
)
85 #ifdef _GLIBCXX_USE_C99_MATH_TR1
87 binomial_pdf(int k
, double p
, int n
)
101 double ln_Cnk
= (std::lgamma(n
+ 1) - std::lgamma(k
+ 1)
102 - std::lgamma(n
- k
+ 1));
103 q
= ln_Cnk
+ k
* std::log(p
) + (n
- k
) * std::log1p(-p
);
113 geometric_pdf(int k
, double p
)
120 return p
* std::pow(1 - p
, k
);
122 } // namespace __gnu_test
124 #endif // #ifndef _GLIBCXX_TESTSUITE_RANDOM_H