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 DumpAtomCompressTest : public CompressedDumpTest {
26 public:
DumpAtomCompressTest()27 DumpAtomCompressTest() : CompressedDumpTest("atom") {}
28 };
29
30 //-------------------------------------------------------------------------------------------------
31 // compressed files
32 //-------------------------------------------------------------------------------------------------
33
TEST_F(DumpAtomCompressTest,compressed_run0)34 TEST_F(DumpAtomCompressTest, compressed_run0)
35 {
36 if (!COMPRESS_BINARY) GTEST_SKIP();
37
38 auto text_file = text_dump_filename("run0.melt");
39 auto compressed_file = compressed_dump_filename("run0.melt");
40
41 if (compression_style == "atom/zstd") {
42 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "", "checksum yes",
43 0);
44 } else {
45 generate_text_and_compressed_dump(text_file, compressed_file, "", "", 0);
46 }
47
48 TearDown();
49
50 ASSERT_FILE_EXISTS(text_file);
51 ASSERT_FILE_EXISTS(compressed_file);
52
53 auto converted_file = convert_compressed_to_text(compressed_file);
54
55 ASSERT_THAT(converted_file, Eq(converted_dump_filename("run0.melt")));
56 ASSERT_FILE_EXISTS(converted_file);
57 ASSERT_FILE_EQUAL(text_file, converted_file);
58 delete_file(text_file);
59 delete_file(compressed_file);
60 delete_file(converted_file);
61 }
62
TEST_F(DumpAtomCompressTest,compressed_no_buffer_run0)63 TEST_F(DumpAtomCompressTest, compressed_no_buffer_run0)
64 {
65 if (!COMPRESS_BINARY) GTEST_SKIP();
66
67 auto text_file = text_dump_filename("no_buffer_run0.melt");
68 auto compressed_file = compressed_dump_filename("no_buffer_run0.melt");
69
70 if (compression_style == "atom/zstd") {
71 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "buffer no",
72 "buffer no checksum yes", 0);
73 } else {
74 generate_text_and_compressed_dump(text_file, compressed_file, "", "buffer no", 0);
75 }
76
77 TearDown();
78
79 ASSERT_FILE_EXISTS(text_file);
80 ASSERT_FILE_EXISTS(compressed_file);
81
82 auto converted_file = convert_compressed_to_text(compressed_file);
83
84 ASSERT_THAT(converted_file, Eq(converted_dump_filename("no_buffer_run0.melt")));
85 ASSERT_FILE_EXISTS(converted_file);
86 ASSERT_FILE_EQUAL(text_file, converted_file);
87 delete_file(text_file);
88 delete_file(compressed_file);
89 delete_file(converted_file);
90 }
91
TEST_F(DumpAtomCompressTest,compressed_multi_file_run1)92 TEST_F(DumpAtomCompressTest, compressed_multi_file_run1)
93 {
94 if (!COMPRESS_BINARY) GTEST_SKIP();
95
96 auto base_name = "multi_file_run1_*.melt";
97 auto base_name_0 = "multi_file_run1_0.melt";
98 auto base_name_1 = "multi_file_run1_1.melt";
99 auto text_file = text_dump_filename(base_name);
100 auto text_file_0 = text_dump_filename(base_name_0);
101 auto text_file_1 = text_dump_filename(base_name_1);
102 auto compressed_file = compressed_dump_filename(base_name);
103 auto compressed_file_0 = compressed_dump_filename(base_name_0);
104 auto compressed_file_1 = compressed_dump_filename(base_name_1);
105
106 if (compression_style == "atom/zstd") {
107 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "", "checksum no", 1);
108 } else {
109 generate_text_and_compressed_dump(text_file, compressed_file, "", "", 1);
110 }
111
112 TearDown();
113
114 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
115 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
116
117 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
118 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
119 ASSERT_FILE_EXISTS(converted_file_0);
120 ASSERT_FILE_EXISTS(converted_file_1);
121 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
122 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
123
124 delete_file(text_file_0);
125 delete_file(text_file_1);
126 delete_file(compressed_file_0);
127 delete_file(compressed_file_1);
128 delete_file(converted_file_0);
129 delete_file(converted_file_1);
130 }
131
TEST_F(DumpAtomCompressTest,compressed_multi_file_with_pad_run1)132 TEST_F(DumpAtomCompressTest, compressed_multi_file_with_pad_run1)
133 {
134 if (!COMPRESS_BINARY) GTEST_SKIP();
135
136 auto base_name = "multi_file_pad_run1_*.melt";
137 auto base_name_0 = "multi_file_pad_run1_000.melt";
138 auto base_name_1 = "multi_file_pad_run1_001.melt";
139 auto text_file = text_dump_filename(base_name);
140 auto text_file_0 = text_dump_filename(base_name_0);
141 auto text_file_1 = text_dump_filename(base_name_1);
142 auto compressed_file = compressed_dump_filename(base_name);
143 auto compressed_file_0 = compressed_dump_filename(base_name_0);
144 auto compressed_file_1 = compressed_dump_filename(base_name_1);
145
146 generate_text_and_compressed_dump(text_file, compressed_file, "", "pad 3", 1);
147
148 TearDown();
149
150 ASSERT_FILE_EXISTS(text_file_0);
151 ASSERT_FILE_EXISTS(text_file_1);
152 ASSERT_FILE_EXISTS(compressed_file_0);
153 ASSERT_FILE_EXISTS(compressed_file_1);
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(DumpAtomCompressTest,compressed_multi_file_with_maxfiles_run1)173 TEST_F(DumpAtomCompressTest, compressed_multi_file_with_maxfiles_run1)
174 {
175 if (!COMPRESS_BINARY) GTEST_SKIP();
176
177 auto base_name = "multi_file_maxfiles_run1_*.melt";
178 auto base_name_0 = "multi_file_maxfiles_run1_0.melt";
179 auto base_name_1 = "multi_file_maxfiles_run1_1.melt";
180 auto base_name_2 = "multi_file_maxfiles_run1_2.melt";
181 auto text_file = text_dump_filename(base_name);
182 auto text_file_0 = text_dump_filename(base_name_0);
183 auto text_file_1 = text_dump_filename(base_name_1);
184 auto text_file_2 = text_dump_filename(base_name_2);
185 auto compressed_file = compressed_dump_filename(base_name);
186 auto compressed_file_0 = compressed_dump_filename(base_name_0);
187 auto compressed_file_1 = compressed_dump_filename(base_name_1);
188 auto compressed_file_2 = compressed_dump_filename(base_name_2);
189
190 generate_text_and_compressed_dump(text_file, compressed_file, "", "maxfiles 2", 2);
191
192 TearDown();
193
194 ASSERT_FILE_NOT_EXISTS(text_file_0);
195 ASSERT_FILE_EXISTS(text_file_1);
196 ASSERT_FILE_EXISTS(text_file_2);
197 ASSERT_FILE_NOT_EXISTS(compressed_file_0);
198 ASSERT_FILE_EXISTS(compressed_file_1);
199 ASSERT_FILE_EXISTS(compressed_file_2);
200
201 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
202 auto converted_file_2 = convert_compressed_to_text(compressed_file_2);
203
204 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
205 ASSERT_THAT(converted_file_2, Eq(converted_dump_filename(base_name_2)));
206 ASSERT_FILE_EXISTS(converted_file_1);
207 ASSERT_FILE_EXISTS(converted_file_2);
208 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
209 ASSERT_FILE_EQUAL(text_file_2, converted_file_2);
210
211 delete_file(text_file_1);
212 delete_file(text_file_2);
213 delete_file(compressed_file_1);
214 delete_file(compressed_file_2);
215 delete_file(converted_file_1);
216 delete_file(converted_file_2);
217 }
218
TEST_F(DumpAtomCompressTest,compressed_with_units_run0)219 TEST_F(DumpAtomCompressTest, compressed_with_units_run0)
220 {
221 if (!COMPRESS_BINARY) GTEST_SKIP();
222
223 auto base_name = "with_units_run0.melt";
224 auto text_file = text_dump_filename(base_name);
225 auto compressed_file = compressed_dump_filename(base_name);
226
227 generate_text_and_compressed_dump(text_file, compressed_file, "", "scale no units yes", 0);
228
229 TearDown();
230
231 ASSERT_FILE_EXISTS(text_file);
232 ASSERT_FILE_EXISTS(compressed_file);
233
234 auto converted_file = convert_compressed_to_text(compressed_file);
235
236 ASSERT_FILE_EXISTS(converted_file);
237 ASSERT_FILE_EQUAL(text_file, converted_file);
238 delete_file(text_file);
239 delete_file(compressed_file);
240 delete_file(converted_file);
241 }
242
TEST_F(DumpAtomCompressTest,compressed_with_time_run0)243 TEST_F(DumpAtomCompressTest, compressed_with_time_run0)
244 {
245 if (!COMPRESS_BINARY) GTEST_SKIP();
246
247 auto base_name = "with_time_run0.melt";
248 auto text_file = text_dump_filename(base_name);
249 auto compressed_file = compressed_dump_filename(base_name);
250
251 generate_text_and_compressed_dump(text_file, compressed_file, "", "scale no time yes", 0);
252
253 TearDown();
254
255 ASSERT_FILE_EXISTS(text_file);
256 ASSERT_FILE_EXISTS(compressed_file);
257
258 auto converted_file = convert_compressed_to_text(compressed_file);
259
260 ASSERT_FILE_EXISTS(converted_file);
261 ASSERT_FILE_EQUAL(text_file, converted_file);
262 delete_file(text_file);
263 delete_file(compressed_file);
264 delete_file(converted_file);
265 }
266
TEST_F(DumpAtomCompressTest,compressed_triclinic_run0)267 TEST_F(DumpAtomCompressTest, compressed_triclinic_run0)
268 {
269 if (!COMPRESS_BINARY) GTEST_SKIP();
270
271 auto base_name = "tri_run0.melt";
272 auto text_file = text_dump_filename(base_name);
273 auto compressed_file = compressed_dump_filename(base_name);
274
275 enable_triclinic();
276 generate_text_and_compressed_dump(text_file, compressed_file, "", "", 0);
277
278 TearDown();
279
280 ASSERT_FILE_EXISTS(text_file);
281 ASSERT_FILE_EXISTS(compressed_file);
282
283 auto converted_file = convert_compressed_to_text(compressed_file);
284
285 ASSERT_FILE_EXISTS(converted_file);
286 ASSERT_FILE_EQUAL(text_file, converted_file);
287 delete_file(text_file);
288 delete_file(compressed_file);
289 delete_file(converted_file);
290 }
291
TEST_F(DumpAtomCompressTest,compressed_triclinic_with_units_run0)292 TEST_F(DumpAtomCompressTest, compressed_triclinic_with_units_run0)
293 {
294 if (!COMPRESS_BINARY) GTEST_SKIP();
295
296 auto base_name = "tri_with_units_run0.melt";
297 auto text_file = text_dump_filename(base_name);
298 auto compressed_file = compressed_dump_filename(base_name);
299
300 enable_triclinic();
301 generate_text_and_compressed_dump(text_file, compressed_file, "", "scale no units yes", 0);
302
303 TearDown();
304
305 ASSERT_FILE_EXISTS(text_file);
306 ASSERT_FILE_EXISTS(compressed_file);
307
308 auto converted_file = convert_compressed_to_text(compressed_file);
309
310 ASSERT_FILE_EXISTS(converted_file);
311 ASSERT_FILE_EQUAL(text_file, converted_file);
312 delete_file(text_file);
313 delete_file(compressed_file);
314 delete_file(converted_file);
315 }
316
TEST_F(DumpAtomCompressTest,compressed_triclinic_with_time_run0)317 TEST_F(DumpAtomCompressTest, compressed_triclinic_with_time_run0)
318 {
319 if (!COMPRESS_BINARY) GTEST_SKIP();
320
321 auto base_name = "tri_with_time_run0.melt";
322 auto text_file = text_dump_filename(base_name);
323 auto compressed_file = compressed_dump_filename(base_name);
324
325 enable_triclinic();
326 generate_text_and_compressed_dump(text_file, compressed_file, "", "scale no time yes", 0);
327
328 TearDown();
329
330 ASSERT_FILE_EXISTS(text_file);
331 ASSERT_FILE_EXISTS(compressed_file);
332
333 auto converted_file = convert_compressed_to_text(compressed_file);
334
335 ASSERT_FILE_EXISTS(converted_file);
336 ASSERT_FILE_EQUAL(text_file, converted_file);
337 delete_file(text_file);
338 delete_file(compressed_file);
339 delete_file(converted_file);
340 }
341
TEST_F(DumpAtomCompressTest,compressed_triclinic_with_image_run0)342 TEST_F(DumpAtomCompressTest, compressed_triclinic_with_image_run0)
343 {
344 if (!COMPRESS_BINARY) GTEST_SKIP();
345
346 auto base_name = "tri_with_image_run0.melt";
347 auto text_file = text_dump_filename(base_name);
348 auto compressed_file = compressed_dump_filename(base_name);
349
350 enable_triclinic();
351 generate_text_and_compressed_dump(text_file, compressed_file, "", "image yes", 0);
352
353 TearDown();
354
355 ASSERT_FILE_EXISTS(text_file);
356 ASSERT_FILE_EXISTS(compressed_file);
357
358 auto converted_file = convert_compressed_to_text(compressed_file);
359
360 ASSERT_FILE_EXISTS(converted_file);
361 ASSERT_FILE_EQUAL(text_file, converted_file);
362 delete_file(text_file);
363 delete_file(compressed_file);
364 delete_file(converted_file);
365 }
366
TEST_F(DumpAtomCompressTest,compressed_modify_bad_param)367 TEST_F(DumpAtomCompressTest, compressed_modify_bad_param)
368 {
369 if (compression_style != "atom/gz") GTEST_SKIP();
370
371 BEGIN_HIDE_OUTPUT();
372 command(fmt::format("dump id1 all {} 1 {}", compression_style,
373 compressed_dump_filename("modify_bad_param_run0_*.melt")));
374 END_HIDE_OUTPUT();
375
376 TEST_FAILURE(
377 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
378 command("dump_modify id1 compression_level 12"););
379 }
380
TEST_F(DumpAtomCompressTest,compressed_modify_multi_bad_param)381 TEST_F(DumpAtomCompressTest, compressed_modify_multi_bad_param)
382 {
383 if (compression_style != "atom/gz") GTEST_SKIP();
384
385 BEGIN_HIDE_OUTPUT();
386 command(fmt::format("dump id1 all {} 1 {}", compression_style,
387 compressed_dump_filename("modify_multi_bad_param_run0_*.melt")));
388 END_HIDE_OUTPUT();
389
390 TEST_FAILURE(
391 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
392 command("dump_modify id1 pad 3 compression_level 12"););
393 }
394
TEST_F(DumpAtomCompressTest,compressed_modify_clevel_run0)395 TEST_F(DumpAtomCompressTest, compressed_modify_clevel_run0)
396 {
397 if (!COMPRESS_BINARY) GTEST_SKIP();
398
399 auto base_name = "modify_clevel_run0.melt";
400 auto text_file = text_dump_filename(base_name);
401 auto compressed_file = compressed_dump_filename(base_name);
402
403 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "", "compression_level 3",
404 0);
405
406 TearDown();
407
408 ASSERT_FILE_EXISTS(text_file);
409 ASSERT_FILE_EXISTS(compressed_file);
410
411 auto converted_file = convert_compressed_to_text(compressed_file);
412
413 ASSERT_THAT(converted_file, Eq(converted_dump_filename(base_name)));
414 ASSERT_FILE_EXISTS(converted_file);
415 ASSERT_FILE_EQUAL(text_file, converted_file);
416 delete_file(text_file);
417 delete_file(compressed_file);
418 delete_file(converted_file);
419 }
420