Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_RandomNumbers_Mseries_Gaussian.cpp
Go to the documentation of this file.
1 
14 #include "parameterManager_YAML.h"
15 
16 #include "bridgeIO.h"
17 using Bridge::vout;
18 
19 #include "randomNumbers_Mseries.h"
20 
21 #ifdef USE_TEST
22 #include "test.h"
23 #endif
24 
25 #ifdef USE_TESTMANAGER_AUTOREGISTER
26 #include "testManager.h"
27 #endif
28 
29 //====================================================================
31 
38 namespace Test_RandomNumbers {
39  //- test-private parameters
40  namespace {
41  const std::string filename_input = "test_RandomNumbers_Mseries_Gaussian.yaml";
42  const std::string filename_output = "stdout";
43 
44  class Parameters_Test_RandomNumbers : public Parameters {
45  public:
46  Parameters_Test_RandomNumbers()
47  {
48  Register_int("seed", 0);
49  Register_int("number_of_samples", 0);
50 
51  Register_string("verbose_level", "NULL");
52 
53  Register_double("expected_result", 0.0);
54  }
55  };
56  }
57 
58  //- prototype declaration
59  int gaussian(void);
60 
61 #ifdef USE_TESTMANAGER_AUTOREGISTER
62  namespace {
63  static const bool is_registered = TestManager::RegisterTest(
64  "RandomNumbers.Mseries.Gaussian",
65  gaussian
66  );
67  }
68 #endif
69 
70  //====================================================================
71  int gaussian(void)
72  {
73  // #### parameter setup ####
74  Parameters_Test_RandomNumbers params_test;
75 
76  Parameters params_all;
77 
78  params_all.Register_Parameters("Test_RandomNumbers", &params_test);
79 
80  ParameterManager_YAML params_manager;
81  params_manager.read_params(filename_input, &params_all);
82 
83  int iseed = params_test.get_int("seed");
84  int Nrand = params_test.get_int("number_of_samples");
85  const string str_vlevel = params_test.get_string("verbose_level");
86 #ifdef USE_TEST
87  const double expected_result = params_test.get_double("expected_result");
88 #endif
89 
91 
92  //- print input parameters
93  vout.general(vl, " iseed = %d\n", iseed);
94  vout.general(vl, " Nrand = %d\n", Nrand);
95  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
96  vout.general(vl, "\n");
97 
98 
99  // #### object setup ####
100  RandomNumbers *rand = new RandomNumbers_Mseries(iseed);
101 
102 
103  // #### Execution main part ####
104  double av = 0.0;
105  double vr = 0.0;
106 
107  double rn1, rn2;
108  for (int i = 0; i < Nrand; ++i) {
109  rand->gauss(rn1, rn2);
110  av += rn1 + rn2;
111  vr += rn1 * rn1 + rn2 * rn2;
112  // vout.general(vl, " %10.8f %10.8f\n",rn1,rn2);
113  }
114  av = av / (2.0 * Nrand);
115  vr = vr / (2.0 * Nrand) - av * av;
116  vr = sqrt(vr);
117 
118  vout.general(vl, "\n");
119  vout.general(vl, "Gaussian distribution:\n");
120  vout.general(vl, " number of samples = %10d\n", Nrand);
121  vout.general(vl, " average = %10.8f\n", av);
122  vout.general(vl, " variance = %10.8f\n", vr);
123  vout.general(vl, " variance(expect) = %10.8f\n", 1.0 / sqrt(2.0));
124 
125  double result = vr;
126 
127 
128  // #### tidy up ####
129  delete rand;
130 
131 
132 #ifdef USE_TEST
133  return Test::verify(expected_result, result);
134 
135 #else
136  return EXIT_SUCCESS;
137 #endif
138  }
139 } // namespace Test_RandomNumbers