Bridge++  Ver. 1.3.x
test_RandomNumbers_Mseries_Gaussian.cpp
Go to the documentation of this file.
1 
14 #include "test.h"
15 
16 #include "randomNumbers_Mseries.h"
17 
18 //====================================================================
20 
30  const std::string test_name = "RandomNumbers.Mseries.Gaussian";
31 
32  //- test-private parameters
33  namespace {
34  const std::string filename_input = "test_RandomNumbers_Mseries_Gaussian.yaml";
35  const std::string filename_output = "stdout";
36 
37  class Parameters_Test_RandomNumbers : public Parameters {
38  public:
39  Parameters_Test_RandomNumbers()
40  {
41  Register_int("seed", 0);
42  Register_int("number_of_samples", 0);
43 
44  Register_string("verbose_level", "NULL");
45 
46  Register_double("expected_result", 0.0);
47  }
48  };
49  }
50 
51  //- prototype declaration
52  int gaussian(void);
53 
54 #ifdef USE_TESTMANAGER_AUTOREGISTER
55  namespace {
56  static const bool is_registered = TestManager::RegisterTest(
57  test_name,
58  gaussian
59  );
60  }
61 #endif
62 
63  //====================================================================
64  int gaussian(void)
65  {
66  // #### parameter setup ####
67  unique_ptr<Parameters> params_test(new Parameters_Test_RandomNumbers);
68  unique_ptr<Parameters> params_all(new Parameters);
69 
70  params_all->Register_Parameters("Test_RandomNumbers", params_test);
71 
72  ParameterManager::read(filename_input, params_all);
73 
74  int iseed = params_test->get_int("seed");
75  int Nrand = params_test->get_int("number_of_samples");
76  const string str_vlevel = params_test->get_string("verbose_level");
77 
78  const bool do_check = params_test->is_set("expected_result");
79  const double expected_result = do_check ? params_test->get_double("expected_result") : 0.0;
80 
82 
83  //- print input parameters
84  vout.general(vl, " iseed = %d\n", iseed);
85  vout.general(vl, " Nrand = %d\n", Nrand);
86  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
87  vout.general(vl, "\n");
88 
89 
90  // #### object setup ####
92  unique_ptr<Timer> timer(new Timer(test_name));
93 
94 
95  // #### Execution main part ####
96  timer->start();
97 
98  double av = 0.0;
99  double vr = 0.0;
100 
101  double rand1, rand2;
102  for (int i = 0; i < Nrand; ++i) {
103  rand->gauss(rand1, rand2);
104  av += rand1 + rand2;
105  vr += rand1 * rand1 + rand2 * rand2;
106  // vout.general(vl, " %10.8f %10.8f\n",rand1,rand2);
107  }
108  av = av / (2.0 * Nrand);
109  vr = vr / (2.0 * Nrand) - av * av;
110  vr = sqrt(vr);
111 
112  vout.general(vl, "\n");
113  vout.general(vl, "Gaussian distribution:\n");
114  vout.general(vl, " number of samples = %10d\n", Nrand);
115  vout.general(vl, " average = %10.8f\n", av);
116  vout.general(vl, " variance = %10.8f\n", vr);
117  vout.general(vl, " variance(expect) = %10.8f\n", 1.0 / sqrt(2.0));
118 
119  double result = vr;
120 
121  timer->report();
122 
123 
124  if (do_check) {
125  return Test::verify(result, expected_result);
126  } else {
127  vout.detailed(vl, "check skipped: expected_result not set.\n\n");
128  return EXIT_SKIP;
129  }
130  }
131 } // namespace Test_RandomNumbers
#define EXIT_SKIP
Definition: test.h:17
Random number generator base on M-series.
BridgeIO vout
Definition: bridgeIO.cpp:278
void detailed(const char *format,...)
Definition: bridgeIO.cpp:82
void general(const char *format,...)
Definition: bridgeIO.cpp:65
int get_int(const string &key) const
Definition: parameters.cpp:42
Class for parameters.
Definition: parameters.h:38
static bool RegisterTest(const std::string &key, const Test_function func)
Definition: testManager.h:80
bool is_set(const string &) const
Definition: parameters.cpp:372
double get_double(const string &key) const
Definition: parameters.cpp:27
void start()
Definition: timer.cpp:44
void Register_Parameters(const string &, Parameters *const)
Definition: parameters.cpp:358
int verify(const double result, const double expected, double eps)
Definition: test.cpp:27
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:39
static void read(const std::string &params_file, Parameters *params)
Definition: timer.h:31
string get_string(const string &key) const
Definition: parameters.cpp:87
void report(const Bridge::VerboseLevel vl=Bridge::GENERAL)
Definition: timer.cpp:128
void gauss(double &rand1, double &rand2)
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28