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 DumpXYZCompressTest : public CompressedDumpTest {
26 public:
DumpXYZCompressTest()27 DumpXYZCompressTest() : CompressedDumpTest("xyz") {}
28 };
29
TEST_F(DumpXYZCompressTest,compressed_run0)30 TEST_F(DumpXYZCompressTest, compressed_run0)
31 {
32 if (!COMPRESS_BINARY) GTEST_SKIP();
33
34 auto base_name = "run*.melt.xyz";
35 auto base_name_0 = "run0.melt.xyz";
36 auto text_files = text_dump_filename(base_name);
37 auto compressed_files = compressed_dump_filename(base_name);
38 auto text_file_0 = text_dump_filename(base_name_0);
39 auto compressed_file_0 = compressed_dump_filename(base_name_0);
40
41 if (compression_style == "xyz/zstd") {
42 generate_text_and_compressed_dump(text_files, compressed_files, "", "", "", "checksum yes",
43 0);
44 } else {
45 generate_text_and_compressed_dump(text_files, compressed_files, "", "", 0);
46 }
47
48 TearDown();
49
50 ASSERT_FILE_EXISTS(text_file_0);
51 ASSERT_FILE_EXISTS(compressed_file_0);
52
53 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
54
55 ASSERT_FILE_EXISTS(converted_file_0);
56 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
57 delete_file(text_file_0);
58 delete_file(compressed_file_0);
59 delete_file(converted_file_0);
60 }
61
TEST_F(DumpXYZCompressTest,compressed_no_buffer_run0)62 TEST_F(DumpXYZCompressTest, compressed_no_buffer_run0)
63 {
64 if (!COMPRESS_BINARY) GTEST_SKIP();
65
66 auto base_name = "no_buffer_run*.melt.xyz";
67 auto base_name_0 = "no_buffer_run0.melt.xyz";
68 auto text_files = text_dump_filename(base_name);
69 auto compressed_files = compressed_dump_filename(base_name);
70 auto text_file_0 = text_dump_filename(base_name_0);
71 auto compressed_file_0 = compressed_dump_filename(base_name_0);
72
73 if (compression_style == "xyz/zstd") {
74 generate_text_and_compressed_dump(text_files, compressed_files, "", "", "buffer no",
75 "buffer no", 0);
76 } else {
77 generate_text_and_compressed_dump(text_files, compressed_files, "", "buffer no", 0);
78 }
79
80 TearDown();
81
82 ASSERT_FILE_EXISTS(text_file_0);
83 ASSERT_FILE_EXISTS(compressed_file_0);
84
85 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
86
87 ASSERT_FILE_EXISTS(converted_file_0);
88 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
89 delete_file(text_file_0);
90 delete_file(compressed_file_0);
91 delete_file(converted_file_0);
92 }
93
TEST_F(DumpXYZCompressTest,compressed_multi_file_run1)94 TEST_F(DumpXYZCompressTest, compressed_multi_file_run1)
95 {
96 if (!COMPRESS_BINARY) GTEST_SKIP();
97
98 auto base_name = "multi_file_run1_*.melt.xyz";
99 auto base_name_0 = "multi_file_run1_0.melt.xyz";
100 auto base_name_1 = "multi_file_run1_1.melt.xyz";
101 auto text_file = text_dump_filename(base_name);
102 auto text_file_0 = text_dump_filename(base_name_0);
103 auto text_file_1 = text_dump_filename(base_name_1);
104 auto compressed_file = compressed_dump_filename(base_name);
105 auto compressed_file_0 = compressed_dump_filename(base_name_0);
106 auto compressed_file_1 = compressed_dump_filename(base_name_1);
107
108 if (compression_style == "xyz/zstd") {
109 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "", "checksum no", 1);
110 } else {
111 generate_text_and_compressed_dump(text_file, compressed_file, "", "", 1);
112 }
113
114 TearDown();
115
116 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
117 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
118
119 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
120 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
121 ASSERT_FILE_EXISTS(converted_file_0);
122 ASSERT_FILE_EXISTS(converted_file_1);
123 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
124 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
125
126 delete_file(text_file_0);
127 delete_file(text_file_1);
128 delete_file(compressed_file_0);
129 delete_file(compressed_file_1);
130 delete_file(converted_file_0);
131 delete_file(converted_file_1);
132 }
133
TEST_F(DumpXYZCompressTest,compressed_multi_file_with_pad_run1)134 TEST_F(DumpXYZCompressTest, compressed_multi_file_with_pad_run1)
135 {
136 if (!COMPRESS_BINARY) GTEST_SKIP();
137
138 auto base_name = "multi_file_pad_run1_*.melt.xyz";
139 auto base_name_0 = "multi_file_pad_run1_000.melt.xyz";
140 auto base_name_1 = "multi_file_pad_run1_001.melt.xyz";
141 auto text_file = text_dump_filename(base_name);
142 auto text_file_0 = text_dump_filename(base_name_0);
143 auto text_file_1 = text_dump_filename(base_name_1);
144 auto compressed_file = compressed_dump_filename(base_name);
145 auto compressed_file_0 = compressed_dump_filename(base_name_0);
146 auto compressed_file_1 = compressed_dump_filename(base_name_1);
147
148 generate_text_and_compressed_dump(text_file, compressed_file, "", "pad 3", 1);
149
150 TearDown();
151
152 ASSERT_FILE_EXISTS(text_file_0);
153 ASSERT_FILE_EXISTS(text_file_1);
154 ASSERT_FILE_EXISTS(compressed_file_0);
155 ASSERT_FILE_EXISTS(compressed_file_1);
156
157 auto converted_file_0 = convert_compressed_to_text(compressed_file_0);
158 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
159
160 ASSERT_THAT(converted_file_0, Eq(converted_dump_filename(base_name_0)));
161 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
162 ASSERT_FILE_EXISTS(converted_file_0);
163 ASSERT_FILE_EXISTS(converted_file_1);
164 ASSERT_FILE_EQUAL(text_file_0, converted_file_0);
165 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
166
167 delete_file(text_file_0);
168 delete_file(text_file_1);
169 delete_file(compressed_file_0);
170 delete_file(compressed_file_1);
171 delete_file(converted_file_0);
172 delete_file(converted_file_1);
173 }
174
TEST_F(DumpXYZCompressTest,compressed_multi_file_with_maxfiles_run1)175 TEST_F(DumpXYZCompressTest, compressed_multi_file_with_maxfiles_run1)
176 {
177 if (!COMPRESS_BINARY) GTEST_SKIP();
178
179 auto base_name = "multi_file_maxfiles_run1_*.melt.xyz";
180 auto base_name_0 = "multi_file_maxfiles_run1_0.melt.xyz";
181 auto base_name_1 = "multi_file_maxfiles_run1_1.melt.xyz";
182 auto base_name_2 = "multi_file_maxfiles_run1_2.melt.xyz";
183 auto text_file = text_dump_filename(base_name);
184 auto text_file_0 = text_dump_filename(base_name_0);
185 auto text_file_1 = text_dump_filename(base_name_1);
186 auto text_file_2 = text_dump_filename(base_name_2);
187 auto compressed_file = compressed_dump_filename(base_name);
188 auto compressed_file_0 = compressed_dump_filename(base_name_0);
189 auto compressed_file_1 = compressed_dump_filename(base_name_1);
190 auto compressed_file_2 = compressed_dump_filename(base_name_2);
191
192 generate_text_and_compressed_dump(text_file, compressed_file, "", "maxfiles 2", 2);
193
194 TearDown();
195
196 ASSERT_FILE_NOT_EXISTS(text_file_0);
197 ASSERT_FILE_EXISTS(text_file_1);
198 ASSERT_FILE_EXISTS(text_file_2);
199 ASSERT_FILE_NOT_EXISTS(compressed_file_0);
200 ASSERT_FILE_EXISTS(compressed_file_1);
201 ASSERT_FILE_EXISTS(compressed_file_2);
202
203 auto converted_file_1 = convert_compressed_to_text(compressed_file_1);
204 auto converted_file_2 = convert_compressed_to_text(compressed_file_2);
205
206 ASSERT_THAT(converted_file_1, Eq(converted_dump_filename(base_name_1)));
207 ASSERT_THAT(converted_file_2, Eq(converted_dump_filename(base_name_2)));
208 ASSERT_FILE_EXISTS(converted_file_1);
209 ASSERT_FILE_EXISTS(converted_file_2);
210 ASSERT_FILE_EQUAL(text_file_1, converted_file_1);
211 ASSERT_FILE_EQUAL(text_file_2, converted_file_2);
212
213 delete_file(text_file_1);
214 delete_file(text_file_2);
215 delete_file(compressed_file_1);
216 delete_file(compressed_file_2);
217 delete_file(converted_file_1);
218 delete_file(converted_file_2);
219 }
220
TEST_F(DumpXYZCompressTest,compressed_modify_bad_param)221 TEST_F(DumpXYZCompressTest, compressed_modify_bad_param)
222 {
223 if (compression_style != "xyz/gz") GTEST_SKIP();
224
225 BEGIN_HIDE_OUTPUT();
226 command(fmt::format("dump id1 all {} 1 {}", compression_style,
227 compressed_dump_filename("modify_bad_param_run0_*.melt.xyz")));
228 END_HIDE_OUTPUT();
229
230 TEST_FAILURE(
231 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
232 command("dump_modify id1 compression_level 12"););
233 }
234
TEST_F(DumpXYZCompressTest,compressed_modify_multi_bad_param)235 TEST_F(DumpXYZCompressTest, compressed_modify_multi_bad_param)
236 {
237 if (compression_style != "xyz/gz") GTEST_SKIP();
238
239 BEGIN_HIDE_OUTPUT();
240 command(fmt::format("dump id1 all {} 1 {}", compression_style,
241 compressed_dump_filename("modify_multi_bad_param_run0_*.melt.xyz")));
242 END_HIDE_OUTPUT();
243
244 TEST_FAILURE(
245 ".*ERROR on proc 0: Illegal dump_modify command: Compression level must in the range of.*",
246 command("dump_modify id1 pad 3 compression_level 12"););
247 }
248
TEST_F(DumpXYZCompressTest,compressed_modify_clevel_run0)249 TEST_F(DumpXYZCompressTest, compressed_modify_clevel_run0)
250 {
251 if (!COMPRESS_BINARY) GTEST_SKIP();
252
253 auto base_name = "modify_clevel_run0.melt.xyz";
254 auto text_file = text_dump_filename(base_name);
255 auto compressed_file = compressed_dump_filename(base_name);
256
257 generate_text_and_compressed_dump(text_file, compressed_file, "", "", "", "compression_level 3",
258 0);
259
260 TearDown();
261
262 ASSERT_FILE_EXISTS(text_file);
263 ASSERT_FILE_EXISTS(compressed_file);
264
265 auto converted_file = convert_compressed_to_text(compressed_file);
266
267 ASSERT_THAT(converted_file, Eq(converted_dump_filename(base_name)));
268 ASSERT_FILE_EXISTS(converted_file);
269 ASSERT_FILE_EQUAL(text_file, converted_file);
270 delete_file(text_file);
271 delete_file(compressed_file);
272 delete_file(converted_file);
273 }
274