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 DumpCustomCompressTest : public CompressedDumpTest {
26 public:
DumpCustomCompressTest()27 DumpCustomCompressTest() : CompressedDumpTest("custom") {}
28 };
29
TEST_F(DumpCustomCompressTest,compressed_run1)30 TEST_F(DumpCustomCompressTest, compressed_run1)
31 {
32 if (!COMPRESS_BINARY) GTEST_SKIP();
33
34 auto base_name = "custom_run1.melt";
35 auto text_file = text_dump_filename(base_name);
36 auto compressed_file = compressed_dump_filename(base_name);
37 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
38
39 if (compression_style == "custom/zstd") {
40 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "units yes",
41 "units yes checksum yes", 1);
42 } else {
43 generate_text_and_compressed_dump(text_file, compressed_file, fields, "units yes", 1);
44 }
45
46 TearDown();
47
48 ASSERT_FILE_EXISTS(text_file);
49 ASSERT_FILE_EXISTS(compressed_file);
50
51 auto converted_file = convert_compressed_to_text(compressed_file);
52
53 ASSERT_FILE_EXISTS(converted_file);
54 ASSERT_FILE_EQUAL(text_file, converted_file);
55 delete_file(text_file);
56 delete_file(compressed_file);
57 delete_file(converted_file);
58 }
59
TEST_F(DumpCustomCompressTest,compressed_with_time_run1)60 TEST_F(DumpCustomCompressTest, compressed_with_time_run1)
61 {
62 if (!COMPRESS_BINARY) GTEST_SKIP();
63
64 auto base_name = "with_time_custom_run1.melt";
65 auto text_file = text_dump_filename(base_name);
66 auto compressed_file = compressed_dump_filename(base_name);
67 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
68
69 if (compression_style == "custom/zstd") {
70 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "time yes",
71 "time yes checksum yes", 1);
72 } else {
73 generate_text_and_compressed_dump(text_file, compressed_file, fields, "time yes", 1);
74 }
75
76 TearDown();
77
78 ASSERT_FILE_EXISTS(text_file);
79 ASSERT_FILE_EXISTS(compressed_file);
80
81 auto converted_file = convert_compressed_to_text(compressed_file);
82
83 ASSERT_FILE_EXISTS(converted_file);
84 ASSERT_FILE_EQUAL(text_file, converted_file);
85 delete_file(text_file);
86 delete_file(compressed_file);
87 delete_file(converted_file);
88 }
89
TEST_F(DumpCustomCompressTest,compressed_no_buffer_run1)90 TEST_F(DumpCustomCompressTest, compressed_no_buffer_run1)
91 {
92 if (!COMPRESS_BINARY) GTEST_SKIP();
93
94 auto base_name = "no_buffer_custom_run1.melt";
95 auto text_file = text_dump_filename(base_name);
96 auto compressed_file = compressed_dump_filename(base_name);
97 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
98
99 if (compression_style == "custom/zstd") {
100 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "buffer no",
101 "buffer no checksum yes", 1);
102 } else {
103 generate_text_and_compressed_dump(text_file, compressed_file, fields, "buffer no", 1);
104 }
105
106 TearDown();
107
108 ASSERT_FILE_EXISTS(text_file);
109 ASSERT_FILE_EXISTS(compressed_file);
110
111 auto converted_file = convert_compressed_to_text(compressed_file);
112
113 ASSERT_FILE_EXISTS(converted_file);
114 ASSERT_FILE_EQUAL(text_file, converted_file);
115 delete_file(text_file);
116 delete_file(compressed_file);
117 delete_file(converted_file);
118 }
119
TEST_F(DumpCustomCompressTest,compressed_triclinic_run1)120 TEST_F(DumpCustomCompressTest, compressed_triclinic_run1)
121 {
122 if (!COMPRESS_BINARY) GTEST_SKIP();
123
124 auto base_name = "custom_tri_run1.melt";
125 auto text_file = text_dump_filename(base_name);
126 auto compressed_file = compressed_dump_filename(base_name);
127 auto fields = "id type proc x y z xs ys zs xsu ysu zsu vx vy vz fx fy fz";
128
129 enable_triclinic();
130
131 generate_text_and_compressed_dump(text_file, compressed_file, fields, "units yes", 1);
132
133 TearDown();
134
135 ASSERT_FILE_EXISTS(text_file);
136 ASSERT_FILE_EXISTS(compressed_file);
137
138 auto converted_file = convert_compressed_to_text(compressed_file);
139
140 ASSERT_FILE_EXISTS(converted_file);
141 ASSERT_FILE_EQUAL(text_file, converted_file);
142 delete_file(text_file);
143 delete_file(compressed_file);
144 delete_file(converted_file);
145 }
146
TEST_F(DumpCustomCompressTest,compressed_multi_file_run1)147 TEST_F(DumpCustomCompressTest, compressed_multi_file_run1)
148 {
149 if (!COMPRESS_BINARY) GTEST_SKIP();
150
151 auto base_name = "multi_file_run1_*.melt.custom";
152 auto base_name_0 = "multi_file_run1_0.melt.custom";
153 auto base_name_1 = "multi_file_run1_1.melt.custom";
154 auto text_file = text_dump_filename(base_name);
155 auto text_file_0 = text_dump_filename(base_name_0);
156 auto text_file_1 = text_dump_filename(base_name_1);
157 auto compressed_file = compressed_dump_filename(base_name);
158 auto compressed_file_0 = compressed_dump_filename(base_name_0);
159 auto compressed_file_1 = compressed_dump_filename(base_name_1);
160 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
161
162 if (compression_style == "custom/zstd") {
163 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "",
164 "checksum no", 1);
165 } else {
166 generate_text_and_compressed_dump(text_file, compressed_file, fields, "", 1);
167 }
168
169 TearDown();
170
171 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
172 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
173
174 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
175 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
176 ASSERT_FILE_EXISTS(converted_file_0);
177 ASSERT_FILE_EXISTS(converted_file_1);
178 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
179 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
180
181 delete_file(text_file_0);
182 delete_file(text_file_1);
183 delete_file(compressed_file_0);
184 delete_file(compressed_file_1);
185 delete_file(converted_file_0);
186 delete_file(converted_file_1);
187 }
188
TEST_F(DumpCustomCompressTest,compressed_multi_file_with_pad_run1)189 TEST_F(DumpCustomCompressTest, compressed_multi_file_with_pad_run1)
190 {
191 if (!COMPRESS_BINARY) GTEST_SKIP();
192
193 auto base_name = "multi_file_pad_run1_*.melt.custom";
194 auto base_name_0 = "multi_file_pad_run1_000.melt.custom";
195 auto base_name_1 = "multi_file_pad_run1_001.melt.custom";
196 auto text_file = text_dump_filename(base_name);
197 auto text_file_0 = text_dump_filename(base_name_0);
198 auto text_file_1 = text_dump_filename(base_name_1);
199 auto compressed_file = compressed_dump_filename(base_name);
200 auto compressed_file_0 = compressed_dump_filename(base_name_0);
201 auto compressed_file_1 = compressed_dump_filename(base_name_1);
202 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
203
204 generate_text_and_compressed_dump(text_file, compressed_file, fields, "pad 3", 1);
205
206 TearDown();
207
208 ASSERT_FILE_EXISTS(text_file_0);
209 ASSERT_FILE_EXISTS(text_file_1);
210 ASSERT_FILE_EXISTS(compressed_file_0);
211 ASSERT_FILE_EXISTS(compressed_file_1);
212
213 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
214 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
215
216 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
217 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
218 ASSERT_FILE_EXISTS(converted_file_0);
219 ASSERT_FILE_EXISTS(converted_file_1);
220 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
221 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
222
223 delete_file(text_file_0);
224 delete_file(text_file_1);
225 delete_file(compressed_file_0);
226 delete_file(compressed_file_1);
227 delete_file(converted_file_0);
228 delete_file(converted_file_1);
229 }
230
TEST_F(DumpCustomCompressTest,compressed_multi_file_with_maxfiles_run1)231 TEST_F(DumpCustomCompressTest, compressed_multi_file_with_maxfiles_run1)
232 {
233 if (!COMPRESS_BINARY) GTEST_SKIP();
234
235 auto base_name = "multi_file_maxfiles_run1_*.melt.custom";
236 auto base_name_0 = "multi_file_maxfiles_run1_0.melt.custom";
237 auto base_name_1 = "multi_file_maxfiles_run1_1.melt.custom";
238 auto base_name_2 = "multi_file_maxfiles_run1_2.melt.custom";
239 auto text_file = text_dump_filename(base_name);
240 auto text_file_0 = text_dump_filename(base_name_0);
241 auto text_file_1 = text_dump_filename(base_name_1);
242 auto text_file_2 = text_dump_filename(base_name_2);
243 auto compressed_file = compressed_dump_filename(base_name);
244 auto compressed_file_0 = compressed_dump_filename(base_name_0);
245 auto compressed_file_1 = compressed_dump_filename(base_name_1);
246 auto compressed_file_2 = compressed_dump_filename(base_name_2);
247 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
248
249 generate_text_and_compressed_dump(text_file, compressed_file, fields, "maxfiles 2", 2);
250
251 TearDown();
252
253 ASSERT_FILE_NOT_EXISTS(text_file_0);
254 ASSERT_FILE_EXISTS(text_file_1);
255 ASSERT_FILE_EXISTS(text_file_2);
256 ASSERT_FILE_NOT_EXISTS(compressed_file_0);
257 ASSERT_FILE_EXISTS(compressed_file_1);
258 ASSERT_FILE_EXISTS(compressed_file_2);
259
260 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
261 auto converted_file_2 = convert_compressed_to_text(compressed_file_2);
262
263 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
264 ASSERT_THAT(converted_file_2, Eq(converted_dump_filename(base_name_2)));
265 ASSERT_FILE_EXISTS(converted_file_1);
266 ASSERT_FILE_EXISTS(converted_file_2);
267 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
268 ASSERT_FILE_EQUAL(text_file_2, converted_file_2);
269
270 delete_file(text_file_1);
271 delete_file(text_file_2);
272 delete_file(compressed_file_1);
273 delete_file(compressed_file_2);
274 delete_file(converted_file_1);
275 delete_file(converted_file_2);
276 }
277
TEST_F(DumpCustomCompressTest,compressed_modify_bad_param)278 TEST_F(DumpCustomCompressTest, compressed_modify_bad_param)
279 {
280 if (compression_style != "custom/gz") GTEST_SKIP();
281
282 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
283 command(fmt::format("dump id1 all {} 1 {} {}", compression_style,
284 compressed_dump_filename("modify_bad_param_run0_*.melt.custom"), fields));
285
286 TEST_FAILURE(
287 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
288 command("dump_modify id1 compression_level 12"););
289 }
290
TEST_F(DumpCustomCompressTest,compressed_modify_multi_bad_param)291 TEST_F(DumpCustomCompressTest, compressed_modify_multi_bad_param)
292 {
293 if (compression_style != "custom/gz") GTEST_SKIP();
294
295 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
296 command(fmt::format("dump id1 all {} 1 {} {}", compression_style,
297 compressed_dump_filename("modify_multi_bad_param_run0_*.melt.custom"),
298 fields));
299
300 TEST_FAILURE(
301 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
302 command("dump_modify id1 pad 3 compression_level 12"););
303 }
304
TEST_F(DumpCustomCompressTest,compressed_modify_clevel_run0)305 TEST_F(DumpCustomCompressTest, compressed_modify_clevel_run0)
306 {
307 if (!COMPRESS_BINARY) GTEST_SKIP();
308
309 auto base_name = "modify_clevel_run0.melt.custom";
310 auto text_file = text_dump_filename(base_name);
311 auto compressed_file = compressed_dump_filename(base_name);
312
313 auto fields = "id type proc x y z ix iy iz xs ys zs xu yu zu xsu ysu zsu vx vy vz fx fy fz";
314 generate_text_and_compressed_dump(text_file, compressed_file, fields, fields, "",
315 "compression_level 3", 0);
316
317 TearDown();
318
319 ASSERT_FILE_EXISTS(text_file);
320 ASSERT_FILE_EXISTS(compressed_file);
321
322 auto converted_file = convert_compressed_to_text(compressed_file);
323
324 ASSERT_THAT(converted_file, Eq(converted_dump_filename(base_name)));
325 ASSERT_FILE_EXISTS(converted_file);
326 ASSERT_FILE_EQUAL(text_file, converted_file);
327 delete_file(text_file);
328 delete_file(compressed_file);
329 delete_file(converted_file);
330 }
331