| 1 | #include <iostream>
|
|---|
| 2 | #include <random>
|
|---|
| 3 | #include <typeinfo>
|
|---|
| 4 |
|
|---|
| 5 | #define BOOST_ENABLE_ASSERT_HANDLER
|
|---|
| 6 | #include <boost/assert.hpp>
|
|---|
| 7 | #include <boost/random.hpp>
|
|---|
| 8 |
|
|---|
| 9 | #include <setjmp.h>
|
|---|
| 10 | #include <csignal>
|
|---|
| 11 | #include <cxxabi.h>
|
|---|
| 12 |
|
|---|
| 13 | jmp_buf env;
|
|---|
| 14 | void signal_handler(int signal)
|
|---|
| 15 | {
|
|---|
| 16 | longjmp(env,2);
|
|---|
| 17 | }
|
|---|
| 18 |
|
|---|
| 19 | namespace boost {
|
|---|
| 20 | inline void assertion_failed(char const * expr, char const * function, char
|
|---|
| 21 | const * file, long line)
|
|---|
| 22 | {
|
|---|
| 23 | std::cout << "BOOST_ASSERT: " << file << ":" << line << ": " << function << ": Assertion `" << expr << "' failed." << std::endl;
|
|---|
| 24 | throw std::runtime_error("BOOST_ASSERT failed.");
|
|---|
| 25 | }
|
|---|
| 26 | }
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | template <typename T>
|
|---|
| 30 | void test(const T k, const double p)
|
|---|
| 31 | {
|
|---|
| 32 | int status;
|
|---|
| 33 | char * realname = abi::__cxa_demangle(typeid(k).name(), 0, 0, &status);
|
|---|
| 34 | std::cout << "Called with type for parameter k: " << realname << std::endl;
|
|---|
| 35 | std::cout << "-----------------------------------------------------------" << std::endl;
|
|---|
| 36 | std::random_device rd;
|
|---|
| 37 | std::mt19937 gen(rd());
|
|---|
| 38 |
|
|---|
| 39 | std::cout << std::endl << "STD RANDOM TEST" << std::endl;
|
|---|
| 40 | std::cout << "Trying: std::negative_binomial_distribution (k = " << k << ", p = " << p << ")" << std::endl;
|
|---|
| 41 | int val = setjmp (env);
|
|---|
| 42 | if (!val) {
|
|---|
| 43 | std::negative_binomial_distribution<> nb(k, p);
|
|---|
| 44 | std::cout << "**************************" << std::endl;
|
|---|
| 45 | std::cout << "*** Constructor passed ***" << std::endl;
|
|---|
| 46 | std::cout << "**************************" << std::endl;
|
|---|
| 47 | std::cout << "Sample: " << nb(gen) << std::endl;
|
|---|
| 48 | std::cout << "**************************" << std::endl;
|
|---|
| 49 | std::cout << "**** Sampling passed *****" << std::endl;
|
|---|
| 50 | std::cout << "**************************" << std::endl;
|
|---|
| 51 | }
|
|---|
| 52 |
|
|---|
| 53 | std::cout << "-----------------------------------------------------------" << std::endl;
|
|---|
| 54 | std::cout << std::endl << "BOOST TEST" << std::endl;
|
|---|
| 55 | boost::random::mt19937 rng;
|
|---|
| 56 | std::cout << "Trying: boost::random::negative_binomial_distribution (k = " << k << ", p = " << p << ")" << std::endl;
|
|---|
| 57 | try
|
|---|
| 58 | {
|
|---|
| 59 | boost::random::negative_binomial_distribution<> nb_boost(k, p);
|
|---|
| 60 | try
|
|---|
| 61 | {
|
|---|
| 62 | std::cout << "**************************" << std::endl;
|
|---|
| 63 | std::cout << "*** Constructor passed ***" << std::endl;
|
|---|
| 64 | std::cout << "**************************" << std::endl;
|
|---|
| 65 | std::cout << "Sample: " << nb_boost(rng) << std::endl;
|
|---|
| 66 | std::cout << "**************************" << std::endl;
|
|---|
| 67 | std::cout << "**** Sampling passed *****" << std::endl;
|
|---|
| 68 | std::cout << "**************************" << std::endl;
|
|---|
| 69 | }
|
|---|
| 70 | catch (const std::runtime_error& error) {
|
|---|
| 71 | std::cout << "Creating random samples: Assertion failed!" << std::endl;
|
|---|
| 72 | }
|
|---|
| 73 | }
|
|---|
| 74 | catch (const std::runtime_error& error) {
|
|---|
| 75 | std::cout << "Constructor: Assertion failed!" << std::endl;
|
|---|
| 76 | }
|
|---|
| 77 | std::cout << "===========================================================" << std::endl << std::endl;
|
|---|
| 78 | }
|
|---|
| 79 | int main()
|
|---|
| 80 | {
|
|---|
| 81 | std::signal(SIGABRT, &signal_handler);
|
|---|
| 82 |
|
|---|
| 83 | const int k = 1;
|
|---|
| 84 | const double stepsize = 0.5;
|
|---|
| 85 | double p = -0.5;
|
|---|
| 86 |
|
|---|
| 87 | for (int i=0; i <= 4; ++i)
|
|---|
| 88 | {
|
|---|
| 89 | test<int>(k, p);
|
|---|
| 90 | p += stepsize;
|
|---|
| 91 | }
|
|---|
| 92 | test<double>(0.99, 0.5);
|
|---|
| 93 | }
|
|---|