Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_IO_GaugeConfig_ILDG.cpp
Go to the documentation of this file.
1 
13 #include "parameterManager_YAML.h"
14 
15 #include "bridgeIO.h"
16 using Bridge::vout;
17 
18 #include "gaugeConfig.h"
19 
20 #include "test_IO_utils.h"
21 
22 #ifdef USE_TEST
23 #include "test.h"
24 #endif
25 
26 #ifdef USE_TESTMANAGER_AUTOREGISTER
27 #include "testManager.h"
28 #endif
29 
30 //====================================================================
32 
39 namespace Test_IO_GaugeConfig {
40  //- test-private parameters
41  namespace {
42  const std::string filename_input = "test_IO_GaugeConfig_ILDG.yaml";
43  const std::string filename_output = "stdout";
44 
45  class Parameters_Test_IO_GaugeConfig : public Parameters {
46  public:
47  Parameters_Test_IO_GaugeConfig()
48  {
49  Register_string("gauge_config_type_input", "NULL");
50  Register_string("config_filename_input", "NULL");
51  Register_string("config_filename_output", "NULL");
52 
53  Register_string("verbose_level", "NULL");
54 
55  Register_double("expected_result", 0.0);
56  }
57  };
58  }
59 
60  //- prototype declaration
61  int test_io_gconf_ILDG(void);
62 
63 #ifdef USE_TESTMANAGER_AUTOREGISTER
64  namespace {
65  static const bool is_registered = TestManager::RegisterTest(
66  "IO.GaugeConfig.ILDG",
68  );
69  }
70 #endif
71 
72  //====================================================================
74  {
75 #ifdef USE_LIMELIB
76  // #### parameter setup ####
77  int Ndim = CommonParameters::Ndim();
78  int Nvol = CommonParameters::Nvol();
79 
80  Parameters_Test_IO_GaugeConfig params_test;
81 
82  Parameters params_all;
83  params_all.Register_Parameters("Test_IO_GaugeConfig", &params_test);
84 
85  ParameterManager_YAML params_manager;
86  params_manager.read_params(filename_input, &params_all);
87 
88  const string str_gconf_read = params_test.get_string("gauge_config_type_input");
89  const string readfile = params_test.get_string("config_filename_input");
90  const string testfile = params_test.get_string("config_filename_output");
91  const string str_vlevel = params_test.get_string("verbose_level");
92 #ifdef USE_TEST
93  const double expected_result = params_test.get_double("expected_result");
94 #endif
95 
97 
98  //- print input parameters
99  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
100  vout.general(vl, " readfile = %s\n", readfile.c_str());
101  vout.general(vl, " testfile = %s\n", testfile.c_str());
102  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
103 
104  //- input parameter check
105  int err = 0;
106  err += ParameterCheck::non_NULL(str_gconf_read);
107  err += ParameterCheck::non_NULL(readfile);
108  err += ParameterCheck::non_NULL(testfile);
109 
110  if (err) {
111  vout.crucial(vl, "Test_IO_GaugeConfig: Input parameters have not been set.\n");
112  abort();
113  }
114 
115 
116  // #### Set up a gauge configuration ####
117  Field_G *U = new Field_G(Nvol, Ndim);
118  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
119  gconf_read->read_file((Field *)U, readfile);
120 
121  Field_G *Utest = new Field_G(Nvol, Ndim);
122  GaugeConfig *gconf_test = new GaugeConfig("ILDG");
123 
124 
125  // #### Execution main part ####
126  err = 0;
127 
128  //- first write to file.
129  gconf_test->write_file(U, testfile);
130 
131  //- then read back from file.
132  gconf_test->read_file(Utest, testfile);
133 
134  //- check with reference config.
135  bool is_equal = (*Utest == *U);
136  if (!is_equal) ++err;
137 
138  vout.general(vl, "Test_IO_GaugeConfig_ILDG:\t%s\n", is_equal ? "ok" : "failed");
139 
140 
141  int result = err;
142 
143 
144  // #### tydy up ####
145  delete gconf_read;
146  delete U;
147 
148  delete gconf_test;
149  delete Utest;
150 
151 
152 #ifdef USE_TEST
153  return Test::verify(expected_result, result);
154 
155 #else
156  return EXIT_SUCCESS;
157 #endif
158 
159 
160 #else // else of #ifdef USE_LIMELIB
162  vout.general(vl, "GaugeConfig_ILDG: LIME unsupported. skip.\n");
163 
164  return EXIT_SUCCESS; // always successful.
165 #endif // endif of #ifdef USE_LIMELIB
166  }
167 } // namespace Test_IO_GaugeConfig