Ticket #5298: testRandom.cpp

File testRandom.cpp, 2.5 KB (added by Stefan Maagh <s.maagh@…>, 12 years ago)
Line 
1#include <boost/random/mersenne_twister.hpp>
2#include <boost/random/normal_distribution.hpp>
3#include <boost/random/uniform_int.hpp>
4#include <boost/random/variate_generator.hpp>
5
6using namespace boost;
7
8typedef normal_distribution<double> normal_dist;
9typedef uniform_int<> uni_dist;
10typedef mt19937 mt_generator;
11typedef variate_generator<mt_generator,
12 normal_dist > normal_generator;
13typedef variate_generator<mt_generator,
14 uni_dist > uni_generator;
15
16
17// Sampling the copied uniform random number generator yields the expected result
18void sample_uni(){
19
20 std::cout << "Uniform: " << std::endl << std::endl;
21
22 mt_generator mt( 1152 ); //arbitrary seed, sufficient to demonstrate the bug
23 uni_dist dist( 0 , 9 );
24 uni_generator gen1( mt , dist );
25
26 gen1(); // sample gen1 first time
27
28 uni_generator gen2( gen1 ); // copy generator
29
30 std::cout << "Initial generator - Copied generator" << std::endl;
31 std::cout << " " << gen1() << " " << gen2() << std::endl;
32 std::cout << " " << gen1() << " " << gen2() << std::endl;
33 std::cout << " " << gen1() << " " << gen2() << std::endl;
34 std::cout << " " << gen1() << " " << gen2() << std::endl;
35}
36
37// Sampling the copied normal distribution random number generator yields the shifted sequence
38void sample_normal(){
39
40 std::cout << "Normal distribution: " << std::endl << std::endl;
41
42 mt_generator mt( 1152 ); //arbitrary seed, sufficient to demonstrate the bug
43 normal_dist dist( 0 , 1 );
44 normal_generator gen1( mt , dist );
45
46 gen1(); // sample gen1 first time
47
48 normal_generator gen2( gen1 ); // copy generator
49
50 std::cout << "Initial generator - Copied generator" << std::endl;
51 std::cout << " " << gen1() << " " << gen2() << std::endl;
52 std::cout << " " << gen1() << " " << gen2() << std::endl;
53 std::cout << " " << gen1() << " " << gen2() << std::endl;
54 std::cout << " " << gen1() << " " << gen2() << std::endl;
55
56}
57
58int main(){
59 sample_normal();
60 std::cout << std::endl << std::endl << "--------------------------------------------" << std::endl << std::endl;
61 sample_uni();
62 return 0;
63}