1 /* ----------------------------------------------------------------------
2 LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
3 https://www.lammps.org/, Sandia National Laboratories
4 Steve Plimpton, sjplimp@sandia.gov
5
6 Copyright (2003) Sandia Corporation. Under the terms of Contract
7 DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
8 certain rights in this software. This software is distributed under
9 the GNU General Public License.
10
11 See the README file in the top-level LAMMPS directory.
12 ------------------------------------------------------------------------- */
13
14 #include "../testing/utils.h"
15 #include "compressed_dump_test.h"
16 #include "fmt/format.h"
17 #include "utils.h"
18 #include "gmock/gmock.h"
19 #include "gtest/gtest.h"
20
21 #include <string>
22
23 using ::testing::Eq;
24
25 class DumpCfgCompressTest : public CompressedDumpTest {
26 public:
DumpCfgCompressTest()27 DumpCfgCompressTest() : CompressedDumpTest("cfg") {}
28 };
29
30 //-------------------------------------------------------------------------------------------------
31 // compressed files
32 //-------------------------------------------------------------------------------------------------
33
TEST_F(DumpCfgCompressTest,compressed_run0)34 TEST_F(DumpCfgCompressTest, compressed_run0)
35 {
36 if (!COMPRESS_BINARY) GTEST_SKIP();
37
38 auto base_name = "run*.melt.cfg";
39 auto text_files = text_dump_filename(base_name);
40 auto compressed_files = compressed_dump_filename(base_name);
41
42 auto base_name_0 = "run0.melt.cfg";
43 auto text_file_0 = text_dump_filename(base_name_0);
44 auto compressed_file_0 = compressed_dump_filename(base_name_0);
45 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
46
47 if (compression_style == "cfg/zstd") {
48 generate_text_and_compressed_dump(text_files, compressed_files, fields, fields, "",
49 "checksum yes", 0);
50 } else {
51 generate_text_and_compressed_dump(text_files, compressed_files, fields, "", 0);
52 }
53
54 TearDown();
55
56 ASSERT_FILE_EXISTS(text_file_0);
57 ASSERT_FILE_EXISTS(compressed_file_0);
58
59 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
60
61 ASSERT_FILE_EXISTS(converted_file_0);
62 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
63 delete_file(text_file_0);
64 delete_file(compressed_file_0);
65 delete_file(converted_file_0);
66 }
67
TEST_F(DumpCfgCompressTest,compressed_no_buffer_run0)68 TEST_F(DumpCfgCompressTest, compressed_no_buffer_run0)
69 {
70 if (!COMPRESS_BINARY) GTEST_SKIP();
71
72 auto base_name = "no_buffer_run*.melt.cfg";
73 auto text_files = text_dump_filename(base_name);
74 auto compressed_files = compressed_dump_filename(base_name);
75
76 auto base_name_0 = "no_buffer_run0.melt.cfg";
77 auto text_file_0 = text_dump_filename(base_name_0);
78 auto compressed_file_0 = compressed_dump_filename(base_name_0);
79 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
80
81 if (compression_style == "cfg/zstd") {
82 generate_text_and_compressed_dump(text_files, compressed_files, fields, fields, "buffer no",
83 "buffer no", 0);
84 } else {
85 generate_text_and_compressed_dump(text_files, compressed_files, fields, "buffer no", 0);
86 }
87
88 TearDown();
89
90 ASSERT_FILE_EXISTS(text_file_0);
91 ASSERT_FILE_EXISTS(compressed_file_0);
92
93 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
94
95 ASSERT_FILE_EXISTS(converted_file_0);
96 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
97 delete_file(text_file_0);
98 delete_file(compressed_file_0);
99 delete_file(converted_file_0);
100 }
101
TEST_F(DumpCfgCompressTest,compressed_unwrap_run0)102 TEST_F(DumpCfgCompressTest, compressed_unwrap_run0)
103 {
104 if (!COMPRESS_BINARY) GTEST_SKIP();
105
106 auto base_name = "unwrap_run*.melt.cfg";
107 auto text_files = text_dump_filename(base_name);
108 auto compressed_files = compressed_dump_filename(base_name);
109
110 auto base_name_0 = "unwrap_run0.melt.cfg";
111 auto text_file_0 = text_dump_filename(base_name_0);
112 auto compressed_file_0 = compressed_dump_filename(base_name_0);
113 auto fields = "mass type xsu ysu zsu id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
114
115 generate_text_and_compressed_dump(text_files, compressed_files, fields, "", 0);
116
117 TearDown();
118
119 ASSERT_FILE_EXISTS(text_file_0);
120 ASSERT_FILE_EXISTS(compressed_file_0);
121
122 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
123
124 ASSERT_FILE_EXISTS(converted_file_0);
125 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
126 delete_file(text_file_0);
127 delete_file(compressed_file_0);
128 delete_file(converted_file_0);
129 }
130
TEST_F(DumpCfgCompressTest,compressed_multi_file_run1)131 TEST_F(DumpCfgCompressTest, compressed_multi_file_run1)
132 {
133 if (!COMPRESS_BINARY) GTEST_SKIP();
134
135 auto base_name = "multi_file_run1_*.melt.cfg";
136 auto base_name_0 = "multi_file_run1_0.melt.cfg";
137 auto base_name_1 = "multi_file_run1_1.melt.cfg";
138 auto text_file = text_dump_filename(base_name);
139 auto text_file_0 = text_dump_filename(base_name_0);
140 auto text_file_1 = text_dump_filename(base_name_1);
141 auto compressed_file = compressed_dump_filename(base_name);
142 auto compressed_file_0 = compressed_dump_filename(base_name_0);
143 auto compressed_file_1 = compressed_dump_filename(base_name_1);
144 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
145
146 if (compression_style == "cfg/zstd") {
147 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "",
148 "checksum no", 1);
149 } else {
150 generate_text_and_compressed_dump(text_file, compressed_file, fields, "", 1);
151 }
152
153 TearDown();
154
155 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
156 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
157
158 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
159 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
160 ASSERT_FILE_EXISTS(converted_file_0);
161 ASSERT_FILE_EXISTS(converted_file_1);
162 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
163 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
164
165 delete_file(text_file_0);
166 delete_file(text_file_1);
167 delete_file(compressed_file_0);
168 delete_file(compressed_file_1);
169 delete_file(converted_file_0);
170 delete_file(converted_file_1);
171 }
172
TEST_F(DumpCfgCompressTest,compressed_multi_file_with_pad_run1)173 TEST_F(DumpCfgCompressTest, compressed_multi_file_with_pad_run1)
174 {
175 if (!COMPRESS_BINARY) GTEST_SKIP();
176
177 auto base_name = "multi_file_pad_run1_*.melt.cfg";
178 auto base_name_0 = "multi_file_pad_run1_000.melt.cfg";
179 auto base_name_1 = "multi_file_pad_run1_001.melt.cfg";
180 auto text_file = text_dump_filename(base_name);
181 auto text_file_0 = text_dump_filename(base_name_0);
182 auto text_file_1 = text_dump_filename(base_name_1);
183 auto compressed_file = compressed_dump_filename(base_name);
184 auto compressed_file_0 = compressed_dump_filename(base_name_0);
185 auto compressed_file_1 = compressed_dump_filename(base_name_1);
186 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
187
188 generate_text_and_compressed_dump(text_file, compressed_file, fields, "pad 3", 1);
189
190 TearDown();
191
192 ASSERT_FILE_EXISTS(text_file_0);
193 ASSERT_FILE_EXISTS(text_file_1);
194 ASSERT_FILE_EXISTS(compressed_file_0);
195 ASSERT_FILE_EXISTS(compressed_file_1);
196
197 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
198 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
199
200 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
201 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
202 ASSERT_FILE_EXISTS(converted_file_0);
203 ASSERT_FILE_EXISTS(converted_file_1);
204 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
205 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
206
207 delete_file(text_file_0);
208 delete_file(text_file_1);
209 delete_file(compressed_file_0);
210 delete_file(compressed_file_1);
211 delete_file(converted_file_0);
212 delete_file(converted_file_1);
213 }
214
TEST_F(DumpCfgCompressTest,compressed_multi_file_with_maxfiles_run1)215 TEST_F(DumpCfgCompressTest, compressed_multi_file_with_maxfiles_run1)
216 {
217 if (!COMPRESS_BINARY) GTEST_SKIP();
218
219 auto base_name = "multi_file_maxfiles_run1_*.melt.cfg";
220 auto base_name_0 = "multi_file_maxfiles_run1_0.melt.cfg";
221 auto base_name_1 = "multi_file_maxfiles_run1_1.melt.cfg";
222 auto base_name_2 = "multi_file_maxfiles_run1_2.melt.cfg";
223 auto text_file = text_dump_filename(base_name);
224 auto text_file_0 = text_dump_filename(base_name_0);
225 auto text_file_1 = text_dump_filename(base_name_1);
226 auto text_file_2 = text_dump_filename(base_name_2);
227 auto compressed_file = compressed_dump_filename(base_name);
228 auto compressed_file_0 = compressed_dump_filename(base_name_0);
229 auto compressed_file_1 = compressed_dump_filename(base_name_1);
230 auto compressed_file_2 = compressed_dump_filename(base_name_2);
231 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
232
233 generate_text_and_compressed_dump(text_file, compressed_file, fields, "maxfiles 2", 2);
234
235 TearDown();
236
237 ASSERT_FILE_NOT_EXISTS(text_file_0);
238 ASSERT_FILE_EXISTS(text_file_1);
239 ASSERT_FILE_EXISTS(text_file_2);
240 ASSERT_FILE_NOT_EXISTS(compressed_file_0);
241 ASSERT_FILE_EXISTS(compressed_file_1);
242 ASSERT_FILE_EXISTS(compressed_file_2);
243
244 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
245 auto converted_file_2 = convert_compressed_to_text(compressed_file_2);
246
247 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
248 ASSERT_THAT(converted_file_2, Eq(converted_dump_filename(base_name_2)));
249 ASSERT_FILE_EXISTS(converted_file_1);
250 ASSERT_FILE_EXISTS(converted_file_2);
251 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
252 ASSERT_FILE_EQUAL(text_file_2, converted_file_2);
253
254 delete_file(text_file_1);
255 delete_file(text_file_2);
256 delete_file(compressed_file_1);
257 delete_file(compressed_file_2);
258 delete_file(converted_file_1);
259 delete_file(converted_file_2);
260 }
261
TEST_F(DumpCfgCompressTest,compressed_modify_bad_param)262 TEST_F(DumpCfgCompressTest, compressed_modify_bad_param)
263 {
264 if (compression_style != "cfg/gz") GTEST_SKIP();
265
266 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
267 BEGIN_HIDE_OUTPUT();
268 command(fmt::format("dump id1 all {} 1 {} {}", compression_style,
269 compressed_dump_filename("modify_bad_param_run0_*.melt.cfg"), fields));
270 END_HIDE_OUTPUT();
271
272 TEST_FAILURE(
273 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
274 command("dump_modify id1 compression_level 12"););
275 }
276
TEST_F(DumpCfgCompressTest,compressed_modify_multi_bad_param)277 TEST_F(DumpCfgCompressTest, compressed_modify_multi_bad_param)
278 {
279 if (compression_style != "cfg/gz") GTEST_SKIP();
280
281 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
282 BEGIN_HIDE_OUTPUT();
283 command(fmt::format("dump id1 all {} 1 {} {}", compression_style,
284 compressed_dump_filename("modify_multi_bad_param_run0_*.melt.cfg"),
285 fields));
286 END_HIDE_OUTPUT();
287
288 TEST_FAILURE(
289 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
290 command("dump_modify id1 pad 3 compression_level 12"););
291 }
292
TEST_F(DumpCfgCompressTest,compressed_modify_clevel_run0)293 TEST_F(DumpCfgCompressTest, compressed_modify_clevel_run0)
294 {
295 if (!COMPRESS_BINARY) GTEST_SKIP();
296
297 auto base_name = "modify_clevel_run*.melt.cfg";
298 auto base_name_0 = "modify_clevel_run0.melt.cfg";
299 auto text_file = text_dump_filename(base_name);
300 auto compressed_file = compressed_dump_filename(base_name);
301 auto text_file_0 = text_dump_filename(base_name_0);
302 auto compressed_file_0 = compressed_dump_filename(base_name_0);
303 auto fields = "mass type xs ys zs id proc procp1 x y z ix iy iz vx vy vz fx fy fz";
304
305 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "",
306 "compression_level 3", 0);
307
308 TearDown();
309
310 ASSERT_FILE_EXISTS(text_file_0);
311 ASSERT_FILE_EXISTS(compressed_file_0);
312
313 auto converted_file_0 = convert_compressed_to_text(compressed_file);
314
315 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name)));
316 ASSERT_FILE_EXISTS(converted_file_0);
317 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
318 delete_file(text_file_0);
319 delete_file(compressed_file_0);
320 delete_file(converted_file_0);
321 }
322