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