Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test_IO_Data_Text.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 "dataIO_Text.h"
21 #include "bridge_complex.h"
22 
23 #ifdef USE_TEST
24 #include "test.h"
25 #endif
26 
27 #ifdef USE_TESTMANAGER_AUTOREGISTER
28 #include "testManager.h"
29 #endif
30 
31 //====================================================================
33 
40 namespace Test_IO_Data {
41  //- test-private parameters
42  namespace {
43  const std::string filename_input = "test_IO_Data_Text.yaml";
44  const std::string filename_output = "stdout";
45 
46  class Parameters_Test_IO_GaugeConfig : public Parameters {
47  public:
48  Parameters_Test_IO_GaugeConfig()
49  {
50  Register_string("gauge_config_type_input", "NULL");
51  Register_string("config_filename_input", "NULL");
52  Register_string("config_filename_output", "NULL");
53 
54  Register_int("data_size", 1024);
55 
56  Register_string("verbose_level", "NULL");
57  Register_double("expected_result", 0.0);
58  }
59  };
60  }
61 
62  //- prototype declaration
63  int test_io_data_text(void);
64 
65 #ifdef USE_TESTMANAGER_AUTOREGISTER
66  namespace {
67  static const bool is_registered = TestManager::RegisterTest(
68  "IO.Data.Text",
69  test_io_data_text
70  );
71  }
72 #endif
73 
74  //====================================================================
76  {
77  // #### parameter setup ####
78  int Ndim = CommonParameters::Ndim();
79  int Nvol = CommonParameters::Nvol();
80  const double tiny = CommonParameters::epsilon_criterion();
81 
82  Parameters_Test_IO_GaugeConfig params_test;
83 
84  Parameters params_all;
85 
86  params_all.Register_Parameters("Test_IO_Data", &params_test);
87 
88  ParameterManager_YAML params_manager;
89  params_manager.read_params(filename_input, &params_all);
90 
91  const string str_gconf_read = params_test.get_string("gauge_config_type_input");
92  const string readfile = params_test.get_string("config_filename_input");
93  const string testfile = params_test.get_string("config_filename_output");
94  const int data_size = params_test.get_int("data_size");
95  const string str_vlevel = params_test.get_string("verbose_level");
96 #ifdef USE_TEST
97  const double expected_result = params_test.get_double("expected_result");
98 #endif
99 
101 
102  //- print input parameters
103  vout.general(vl, " gconf_read = %s\n", str_gconf_read.c_str());
104  vout.general(vl, " readfile = %s\n", readfile.c_str());
105  vout.general(vl, " testfile = %s\n", testfile.c_str());
106  vout.general(vl, " data_size = %d\n", data_size);
107  vout.general(vl, " vlevel = %s\n", str_vlevel.c_str());
108  vout.general(vl, "\n");
109 
110  //- input parameter check
111  int err = 0;
112  err += ParameterCheck::non_NULL(str_gconf_read);
113  err += ParameterCheck::non_NULL(readfile);
114  err += ParameterCheck::non_NULL(testfile);
115 
116  if (err) {
117  vout.crucial(vl, "Test_IO_Data: Input parameters have not been set.\n");
118  abort();
119  }
120 
121 
122  // #### Set up a gauge configuration ####
123  Field_G *U = new Field_G(Nvol, Ndim);
124  GaugeConfig *gconf_read = new GaugeConfig(str_gconf_read);
125  gconf_read->read_file((Field *)U, readfile);
126 
127 
128  // ##### object setup #####
129  DataIO *data_io = new DataIO_Text;
130 
131 
132  // #### Execution main part ####
133  err = 0;
134 
135  //- first write to file.
136  std::valarray<double> array(data_size);
137  double *p = U->ptr(0);
138 
139  for (size_t i = 0; i < data_size; ++i) {
140  array[i] = *p++;
141  }
142 
143  data_io->write_file(array, testfile, false);
144 
145 
146  //- write again with complex data.
147  std::valarray<dcomplex> arrayc(data_size);
148  p = U->ptr(0);
149 
150  for (size_t i = 0; i < data_size; ++i) {
151  double x = *p++;
152  double y = *p++;
153 
154  arrayc[i] = cmplx(x, y);
155  }
156 
157  data_io->write_file(arrayc, testfile, true);
158 
159 
160  //- then read back from file.
161  std::valarray<double> array2(data_size);
162 
163  data_io->read_file(array2, testfile);
164 
165 
166  //- check with reference config.
167  for (size_t i = 0; i < data_size; ++i) {
168  if (abs(array[i] - array2[i]) > tiny) ++err;
169  }
170 
171  vout.general(vl, "Test_IO_Data:\t%s\n", (err == 0) ? "ok" : "failed");
172 
173 
174  int result = err;
175 
176 
177  // #### tydy up ####
178  delete gconf_read;
179  delete U;
180  delete data_io;
181 
182 
183 #ifdef USE_TEST
184  return Test::verify(expected_result, result);
185 
186 #else
187  return EXIT_SUCCESS;
188 #endif
189  }
190 } // namespace Test_IO_Data