32 const std::string
test_name =
"RandomNumbers.SFMT.Uniform";
36 const std::string filename_input =
"test_RandomNumbers_SFMT_Uniform.yaml";
37 const std::string filename_output =
"stdout";
39 class Parameters_Test_RandomNumbers :
public Parameters {
41 Parameters_Test_RandomNumbers()
43 Register_int(
"number_of_seeds", 0);
44 Register_int(
"seed_base", 0);
45 Register_int(
"number_of_samples", 0);
47 Register_string(
"verbose_level",
"NULL");
49 Register_double(
"expected_result", 0.0);
57 #ifdef USE_TESTMANAGER_AUTOREGISTER
70 unique_ptr<Parameters> params_test(
new Parameters_Test_RandomNumbers);
71 unique_ptr<Parameters> params_all(
new Parameters);
73 params_all->Register_Parameters(
"Test_RandomNumbers", params_test);
77 int Nseed = params_test->get_int(
"number_of_seeds");
78 int seed_base = params_test->get_int(
"seed_base");
79 int Nrand = params_test->get_int(
"number_of_samples");
80 const string str_vlevel = params_test->get_string(
"verbose_level");
82 const bool do_check = params_test->is_set(
"expected_result");
83 const double expected_result = do_check ? params_test->get_double(
"expected_result") : 0.0;
91 vout.
general(vl,
" vlevel = %s\n", str_vlevel.c_str());
96 unique_ptr<Timer> timer(
new Timer(test_name));
104 vout.
general(vl,
" number of samples = %10d\n", Nrand);
109 for (
int iseed = 0; iseed < Nseed; ++iseed) {
110 int iseed2 = seed_base + iseed;
112 unique_ptr<RandomNumbers> rand(
new RandomNumbers_SFMT(iseed2));
115 for (
int i = 0; i < Nrand; ++i) {
116 double rand1 = rand->get();
117 double rand2 = rand->get();
118 double r = rand1 * rand1 + rand2 * rand2;
119 if (r < 1.0) { ++Npi; }
123 double pi_exp = (4.0 * Npi) / Nrand;
126 t2 += pi_exp * pi_exp;
129 vout.
general(vl,
" %10d %14.10f\n", iseed2, pi_exp);
132 double api = t1 / (double)Nseed;
133 double vpi = t2 / (double)Nseed - api * api;
134 double dpi = sqrt(vpi);
135 double epi = dpi / sqrt((
double)Nseed - 1);
137 double pi = 3.141592653589793;
153 vout.
detailed(vl,
"check skipped: expected_result not set.\n\n");
158 #endif // USE_SFMTLIB
void detailed(const char *format,...)
void general(const char *format,...)
const std::string test_name
int uniform_calc_pi(void)
static bool RegisterTest(const std::string &key, const Test_function func)
int verify(const double result, const double expected, double eps)
static void read(const std::string ¶ms_file, Parameters *params)
static VerboseLevel set_verbose_level(const std::string &str)