From 1e19f9c28f94987570a33a9242cf267aa7c31d3b Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Tue, 12 Nov 2024 08:24:45 +0100 Subject: [PATCH] Add a set of missing tests for parallel checker for serial coverage --- tests/ParallelCheckerTester.cpp | 6 +++ tests/ParallelCheckerTester.hpp | 1 + tests/test_ParallelChecker_read.cpp | 63 +++++++++++++++++++++++++++-- 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/tests/ParallelCheckerTester.cpp b/tests/ParallelCheckerTester.cpp index 80e92e449..467705e7f 100644 --- a/tests/ParallelCheckerTester.cpp +++ b/tests/ParallelCheckerTester.cpp @@ -41,3 +41,9 @@ ParallelCheckerTester::setTag(size_t tag) const { ParallelChecker::instance().m_tag = tag; } + +void +ParallelCheckerTester::setTagWithCheck(size_t tag) const +{ + ParallelChecker::instance().setTag(tag); +} diff --git a/tests/ParallelCheckerTester.hpp b/tests/ParallelCheckerTester.hpp index 9aefed506..90b476558 100644 --- a/tests/ParallelCheckerTester.hpp +++ b/tests/ParallelCheckerTester.hpp @@ -15,6 +15,7 @@ class ParallelCheckerTester void setFilename(const std::string& filename) const; void setMode(ParallelChecker::Mode mode) const; void setTag(size_t tag) const; + void setTagWithCheck(size_t tag) const; ParallelCheckerTester() = default; ~ParallelCheckerTester() = default; diff --git a/tests/test_ParallelChecker_read.cpp b/tests/test_ParallelChecker_read.cpp index 026cd4063..12a65e475 100644 --- a/tests/test_ParallelChecker_read.cpp +++ b/tests/test_ParallelChecker_read.cpp @@ -9,14 +9,14 @@ #include <mesh/SubItemArrayPerItemUtils.hpp> #include <mesh/SubItemValuePerItemUtils.hpp> +#include <ParallelCheckerTester.hpp> + #include <filesystem> // clazy:excludeall=non-pod-global-static #ifdef PUGS_HAS_HDF5 -#include <ParallelCheckerTester.hpp> - template <typename T> struct test_TinyVectorDataType; @@ -56,6 +56,26 @@ TEST_CASE("ParallelChecker_read", "[dev]") REQUIRE_NOTHROW(ParallelChecker::create()); REQUIRE_NOTHROW(ParallelChecker::instance().setMode(ParallelChecker::Mode::read)); + { + ParallelCheckerTester pc_tester; + pc_tester.setTag(12); + REQUIRE(pc_tester.getTag() == 12); + + REQUIRE_THROWS_WITH(ParallelChecker::instance().setFilename("custom.h5"), + "unexpected error: Cannot modify parallel checker file if it was already used"); + REQUIRE(ParallelChecker::instance().filename() == "parallel_checker.h5"); + REQUIRE_THROWS_WITH(ParallelChecker::instance().setMode(ParallelChecker::Mode::read), + "unexpected error: Cannot modify parallel checker mode if it was already used"); + + pc_tester.setTag(0); + REQUIRE(pc_tester.getTag() == 0); + + const bool is_resuming = ResumingManager::getInstance().isResuming(); + ResumingManager::getInstance().setIsResuming(false); + REQUIRE_THROWS_WITH(pc_tester.setTagWithCheck(0), + "unexpected error: Cannot modify parallel checker tag if not resuming"); + ResumingManager::getInstance().setIsResuming(is_resuming); + } std::string tmp_dirname; { @@ -1065,8 +1085,10 @@ TEST_CASE("ParallelChecker_read", "[dev]") values[node_id][i_cell] = std::sin(node_number[node_id] + 2 * i_cell); } } - + std::clog << "SAME:\n" << std::flush; REQUIRE_NOTHROW(parallel_check(values, "sin", source_location)); + + std::clog << "DIFF NAME:\n" << std::flush; pc_tester.setTag(tag); UNSCOPED_INFO("can have different name in ref"); REQUIRE_NOTHROW(parallel_check(values, "not_sin", source_location)); @@ -2046,6 +2068,35 @@ TEST_CASE("ParallelChecker_read", "[dev]") REQUIRE_NOTHROW(ParallelChecker::instance().setMode(ParallelChecker::Mode::read)); REQUIRE_NOTHROW(not ParallelChecker::instance().isWriting()); + REQUIRE(ParallelChecker::instance().filename() == "parallel_checker.h5"); + REQUIRE_NOTHROW(ParallelChecker::instance().setFilename("custom.h5")); + REQUIRE(ParallelChecker::instance().filename() == "custom.h5"); + REQUIRE_NOTHROW(ParallelChecker::instance().setFilename("parallel_checker.h5")); + REQUIRE(ParallelChecker::instance().filename() == "parallel_checker.h5"); + + { + ParallelCheckerTester pc_tester; + pc_tester.setTag(12); + REQUIRE(pc_tester.getTag() == 12); + + REQUIRE(not ResumingManager::getInstance().isResuming()); + ResumingManager::getInstance().setIsResuming(true); + pc_tester.setTagWithCheck(3); + REQUIRE(ParallelChecker::instance().tag() == 3); + + ResumingManager::getInstance().setIsResuming(false); + REQUIRE_THROWS_WITH(pc_tester.setTagWithCheck(0), + "unexpected error: Cannot modify parallel checker tag if not resuming"); + + REQUIRE_THROWS_WITH(ParallelChecker::instance().setFilename("custom.h5"), + "unexpected error: Cannot modify parallel checker file if it was already used"); + REQUIRE(ParallelChecker::instance().filename() == "parallel_checker.h5"); + REQUIRE_THROWS_WITH(ParallelChecker::instance().setMode(ParallelChecker::Mode::read), + "unexpected error: Cannot modify parallel checker mode if it was already used"); + + pc_tester.setTag(0); + REQUIRE(pc_tester.getTag() == 0); + } auto mesh = MeshDataBaseForTests::get().unordered1DMesh()->get<Mesh<1>>(); const Connectivity<1>& connectivity = mesh->connectivity(); @@ -2074,6 +2125,12 @@ TEST_CASE("ParallelChecker_read", "[dev]") REQUIRE_THROWS_WITH(parallel_check(SubItemArrayPerItemVariant{napc}, "test"), "error: parallel checker cannot be used without HDF5 support"); + DiscreteFunctionP0<double> df_R{mesh}; + REQUIRE_THROWS_WITH(parallel_check(df_R, "test"), "error: parallel checker cannot be used without HDF5 support"); + + DiscreteFunctionP0Vector<double> df_Rn{mesh, 2}; + REQUIRE_THROWS_WITH(parallel_check(df_Rn, "test"), "error: parallel checker cannot be used without HDF5 support"); + REQUIRE_NOTHROW(ParallelChecker::destroy()); } -- GitLab