201 std::string
const& reference_path,
202 std::string
const& output_directory)
204 if (reference_path.empty())
207 "Reference path containing expected result files can not be "
216 _command_lines.reserve(vtkdiff_configs.size() + xdmfdiff_configs.size());
221 auto const append_tests =
222 [&](std::string
const& tool, std::string
const& tool_path,
223 std::size_t
const number_of_configs, FilePairs
const& filenames,
224 std::string
const& field_name,
225 std::string
const& reference_field_name,
226 std::string
const& absolute_tolerance,
227 std::string
const& relative_tolerance,
228 std::string
const& extra_options)
230 if (filenames.empty())
233 "No files from test definitions were added for tests but {} "
236 (number_of_configs == 1 ?
"test was" :
"tests were"));
238 checkTolerance(
"absolute", absolute_tolerance);
239 checkTolerance(
"relative", relative_tolerance);
241 for (
auto const& [reference_file, output_file] : filenames)
243 auto const output_filename =
247 std::string command_line = fmt::format(
248 "{} -a {} -b {} {} {} --abs {} --rel {}{}", tool_path,
249 safeString(reference_field_name), safeString(field_name),
250 formatPathForDiffTool(
252 formatPathForDiffTool(output_filename), absolute_tolerance,
253 relative_tolerance, extra_options);
254 INFO(
"Will run '{:s}'", command_line);
259 std::string
const vtkdiff =
260 vtkdiff_configs.empty() ?
"" : findDiffTool(
"vtkdiff",
"VTKDIFF_EXE");
261 for (
auto const& vtkdiff_config : vtkdiff_configs)
263 std::string
const& field_name =
265 vtkdiff_config.getConfigParameter<std::string>(
"field");
266 DBUG(
"vtkdiff will compare field '{:s}'.", field_name);
267 std::string
const reference_field_name =
270 .getConfigParameterOptional<std::string>(
"reference_field")
271 .value_or(field_name);
274 if (
auto const regex_string =
276 vtkdiff_config.getConfigParameterOptional<std::string>(
"regex"))
279 filenames = findFilesMatchingRegex(*regex_string, reference_path);
283 std::string filename =
285 vtkdiff_config.getConfigParameter<std::string>(
"file");
286 std::string reference_filename =
289 .getConfigParameterOptional<std::string>(
"reference_file")
298 "_" + std::to_string(mpi.
rank) +
".vtu";
301 reference_filename) +
302 "_" + std::to_string(mpi.
rank) +
".vtu";
305 filenames.emplace_back(reference_filename, filename);
308 auto const absolute_tolerance =
310 vtkdiff_config.getConfigParameter<std::string>(
"absolute_tolerance",
312 auto const relative_tolerance =
314 vtkdiff_config.getConfigParameter<std::string>(
"relative_tolerance",
317 append_tests(
"vtkdiff", vtkdiff, vtkdiff_configs.size(), filenames,
318 field_name, reference_field_name, absolute_tolerance,
319 relative_tolerance,
"");
322 std::string
const xdmfdiff = xdmfdiff_configs.empty()
324 : findDiffTool(
"xdmfdiff",
"XDMFDIFF_EXE");
325 for (
auto const& xdmfdiff_config : xdmfdiff_configs)
327 std::string
const& field_name =
329 xdmfdiff_config.getConfigParameter<std::string>(
"field");
330 DBUG(
"xdmfdiff will compare field '{:s}'.", field_name);
331 std::string
const reference_field_name =
334 .getConfigParameterOptional<std::string>(
"reference_field")
335 .value_or(field_name);
338 if (
auto const regex_string =
340 xdmfdiff_config.getConfigParameterOptional<std::string>(
"regex"))
342 filenames = findFilesMatchingRegex(*regex_string, reference_path);
346 std::string
const filename =
348 xdmfdiff_config.getConfigParameter<std::string>(
"file");
349 std::string
const reference_filename =
352 .getConfigParameterOptional<std::string>(
"reference_file")
354 filenames.emplace_back(reference_filename, filename);
357 auto const absolute_tolerance =
359 xdmfdiff_config.getConfigParameter<std::string>(
360 "absolute_tolerance",
"");
361 auto const relative_tolerance =
363 xdmfdiff_config.getConfigParameter<std::string>(
364 "relative_tolerance",
"");
366 std::string
const timestep =
368 xdmfdiff_config.getConfigParameter<std::string>(
"timestep");
369 std::string
const reference_timestep =
372 .getConfigParameterOptional<std::string>(
"reference_timestep")
375 append_tests(
"xdmfdiff", xdmfdiff, xdmfdiff_configs.size(), filenames,
376 field_name, reference_field_name, absolute_tolerance,
378 fmt::format(
" --timestep-a {} --timestep-b {}",
379 reference_timestep, timestep));