diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6985be9cb6dc922093cd7bee3121b21fc49c6762..90932a5f76575f4a9dece9f1aacde73e7883ee2a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -71,6 +71,7 @@ add_executable (unit_tests test_DiscreteFunctionType.cpp test_DiscreteFunctionUtils.cpp test_DoWhileProcessor.cpp + test_Dual1DConnectivityBuilder.cpp test_DualConnectivityManager.cpp test_DualMeshManager.cpp test_DualMeshType.cpp diff --git a/tests/test_DiamondDualConnectivityBuilder.cpp b/tests/test_DiamondDualConnectivityBuilder.cpp index 2ff0e295b85e9e5d55a6e4dd59f35c46d1381f6d..70b8f75440061530f386654a4bbf9e3f5342d33e 100644 --- a/tests/test_DiamondDualConnectivityBuilder.cpp +++ b/tests/test_DiamondDualConnectivityBuilder.cpp @@ -32,72 +32,6 @@ get_item_ref_ids(const ConnectivityType& connectivity) TEST_CASE("DiamondDualConnectivityBuilder", "[mesh]") { - SECTION("1D") - { - constexpr static size_t Dimension = 1; - - using ConnectivityType = Connectivity<Dimension>; - using MeshType = Mesh<ConnectivityType>; - - std::shared_ptr<const MeshType> mesh = MeshDataBaseForTests::get().unordered1DMesh(); - const ConnectivityType& primal_connectivity = mesh->connectivity(); - - REQUIRE(primal_connectivity.numberOfNodes() == 35); - REQUIRE(primal_connectivity.numberOfCells() == 34); - - std::shared_ptr p_diamond_dual_connectivity = - DualConnectivityManager::instance().getDiamondDualConnectivity(primal_connectivity); - const ConnectivityType& dual_connectivity = *p_diamond_dual_connectivity; - - REQUIRE(dual_connectivity.numberOfNodes() == 36); - REQUIRE(dual_connectivity.numberOfCells() == 35); - - SECTION("ref node list") - { - REQUIRE(primal_connectivity.numberOfRefItemList<ItemType::node>() == 3); - REQUIRE(dual_connectivity.numberOfRefItemList<ItemType::node>() == 2); - - const auto primal_ref_node_list = get_item_ref_ids<ItemType::node>(primal_connectivity); - REQUIRE(primal_ref_node_list.size() == 3); - - REQUIRE(primal_ref_node_list.count("INTERFACE(3)") == 1); - REQUIRE(primal_ref_node_list.count("XMAX(2)") == 1); - REQUIRE(primal_ref_node_list.count("XMIN(1)") == 1); - - REQUIRE(primal_ref_node_list.at("INTERFACE(3)") == 1); - REQUIRE(primal_ref_node_list.at("XMAX(2)") == 1); - REQUIRE(primal_ref_node_list.at("XMIN(1)") == 1); - - const auto dual_ref_node_list = get_item_ref_ids<ItemType::node>(dual_connectivity); - REQUIRE(dual_ref_node_list.size() == 2); - - REQUIRE(dual_ref_node_list.count("XMAX(2)") == 1); - REQUIRE(dual_ref_node_list.count("XMIN(1)") == 1); - - REQUIRE(dual_ref_node_list.at("XMAX(2)") == 1); - REQUIRE(dual_ref_node_list.at("XMIN(1)") == 1); - } - - SECTION("ref cell list") - { - REQUIRE(primal_connectivity.numberOfRefItemList<ItemType::cell>() == 2); - // Diamond dual cell references are not computed - REQUIRE(dual_connectivity.numberOfRefItemList<ItemType::cell>() == 0); - - const auto primal_ref_cell_list = get_item_ref_ids<ItemType::cell>(primal_connectivity); - REQUIRE(primal_ref_cell_list.size() == 2); - - REQUIRE(primal_ref_cell_list.count("LEFT(4)") == 1); - REQUIRE(primal_ref_cell_list.count("RIGHT(5)") == 1); - - REQUIRE(primal_ref_cell_list.at("LEFT(4)") == 26); - REQUIRE(primal_ref_cell_list.at("RIGHT(5)") == 8); - - const auto dual_ref_cell_list = get_item_ref_ids<ItemType::cell>(dual_connectivity); - REQUIRE(dual_ref_cell_list.size() == 0); - } - } - SECTION("2D") { constexpr static size_t Dimension = 2; diff --git a/tests/test_Dual1DConnectivityBuilder.cpp b/tests/test_Dual1DConnectivityBuilder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c3b4796c0d479682f591b815b936e7d1024006ca --- /dev/null +++ b/tests/test_Dual1DConnectivityBuilder.cpp @@ -0,0 +1,97 @@ +#include <catch2/catch_test_macros.hpp> +#include <catch2/matchers/catch_matchers_all.hpp> + +#include <MeshDataBaseForTests.hpp> +#include <mesh/DualConnectivityManager.hpp> + +#include <mesh/Connectivity.hpp> +#include <mesh/ItemValueUtils.hpp> +#include <mesh/Mesh.hpp> + +template <ItemType item_type, typename ConnectivityType> +inline auto +get_item_ref_ids(const ConnectivityType& connectivity) +{ + std::map<std::string, size_t> ref_id_set; + for (size_t i = 0; i < connectivity.template numberOfRefItemList<item_type>(); ++i) { + const auto& ref_id_list = connectivity.template refItemList<item_type>(i); + std::ostringstream os; + os << ref_id_list.refId(); + ItemValue<size_t, item_type> item_tag{connectivity}; + item_tag.fill(0); + for (size_t i_item = 0; i_item < ref_id_list.list().size(); ++i_item) { + item_tag[ref_id_list.list()[i_item]] = 1; + } + + ref_id_set[os.str()] = sum(item_tag); + } + return ref_id_set; +} + +// clazy:excludeall=non-pod-global-static + +TEST_CASE("Dual1DConnectivityBuilder", "[mesh]") +{ + constexpr static size_t Dimension = 1; + + using ConnectivityType = Connectivity<Dimension>; + using MeshType = Mesh<ConnectivityType>; + + std::shared_ptr<const MeshType> mesh = MeshDataBaseForTests::get().unordered1DMesh(); + const ConnectivityType& primal_connectivity = mesh->connectivity(); + + REQUIRE(primal_connectivity.numberOfNodes() == 35); + REQUIRE(primal_connectivity.numberOfCells() == 34); + + std::shared_ptr p_dual_1d_connectivity = + DualConnectivityManager::instance().getDual1DConnectivity(primal_connectivity); + const ConnectivityType& dual_connectivity = *p_dual_1d_connectivity; + + REQUIRE(dual_connectivity.numberOfNodes() == 36); + REQUIRE(dual_connectivity.numberOfCells() == 35); + + SECTION("ref node list") + { + REQUIRE(primal_connectivity.numberOfRefItemList<ItemType::node>() == 3); + REQUIRE(dual_connectivity.numberOfRefItemList<ItemType::node>() == 2); + + const auto primal_ref_node_list = get_item_ref_ids<ItemType::node>(primal_connectivity); + REQUIRE(primal_ref_node_list.size() == 3); + + REQUIRE(primal_ref_node_list.count("INTERFACE(3)") == 1); + REQUIRE(primal_ref_node_list.count("XMAX(2)") == 1); + REQUIRE(primal_ref_node_list.count("XMIN(1)") == 1); + + REQUIRE(primal_ref_node_list.at("INTERFACE(3)") == 1); + REQUIRE(primal_ref_node_list.at("XMAX(2)") == 1); + REQUIRE(primal_ref_node_list.at("XMIN(1)") == 1); + + const auto dual_ref_node_list = get_item_ref_ids<ItemType::node>(dual_connectivity); + REQUIRE(dual_ref_node_list.size() == 2); + + REQUIRE(dual_ref_node_list.count("XMAX(2)") == 1); + REQUIRE(dual_ref_node_list.count("XMIN(1)") == 1); + + REQUIRE(dual_ref_node_list.at("XMAX(2)") == 1); + REQUIRE(dual_ref_node_list.at("XMIN(1)") == 1); + } + + SECTION("ref cell list") + { + REQUIRE(primal_connectivity.numberOfRefItemList<ItemType::cell>() == 2); + // dual 1d cell references are not computed + REQUIRE(dual_connectivity.numberOfRefItemList<ItemType::cell>() == 0); + + const auto primal_ref_cell_list = get_item_ref_ids<ItemType::cell>(primal_connectivity); + REQUIRE(primal_ref_cell_list.size() == 2); + + REQUIRE(primal_ref_cell_list.count("LEFT(4)") == 1); + REQUIRE(primal_ref_cell_list.count("RIGHT(5)") == 1); + + REQUIRE(primal_ref_cell_list.at("LEFT(4)") == 26); + REQUIRE(primal_ref_cell_list.at("RIGHT(5)") == 8); + + const auto dual_ref_cell_list = get_item_ref_ids<ItemType::cell>(dual_connectivity); + REQUIRE(dual_ref_cell_list.size() == 0); + } +}