diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp index 6bf5efc8b8add13d6f389f8c19b22b723f1025f4..fa95c4e1bba54c8ba1c623e67d2774313c85617b 100644 --- a/src/scheme/DiscreteFunctionP0.hpp +++ b/src/scheme/DiscreteFunctionP0.hpp @@ -258,7 +258,7 @@ class DiscreteFunctionP0 : public IDiscreteFunction DiscreteFunctionP0(const std::shared_ptr<const MeshType>& mesh, const CellValue<DataType>& cell_value) : m_mesh{mesh}, m_cell_values{cell_value} { - Assert(mesh->connectivity().shared_ptr() == cell_value.connectivity_ptr()); + Assert(mesh->shared_connectivity() == cell_value.connectivity_ptr()); } DiscreteFunctionP0() noexcept = delete; diff --git a/tests/test_DiscreteFunctionP0.cpp b/tests/test_DiscreteFunctionP0.cpp index 0adfd1c1f6c72404880ed5ba9ef1e719648c05ce..704000ecc79894ee9876ded1e6cfbd53f1aae5a7 100644 --- a/tests/test_DiscreteFunctionP0.cpp +++ b/tests/test_DiscreteFunctionP0.cpp @@ -49,8 +49,12 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]") REQUIRE(same_values(h, zero)); REQUIRE(same_values(h, h_values)); + DiscreteFunctionP0<Dimension, TinyVector<Dimension>> shallow_h{mesh}; + shallow_h = h; + copy_to(MeshDataManager::instance().getMeshData(*mesh).xj(), h_values); + REQUIRE(same_values(shallow_h, h_values)); REQUIRE(same_values(h, h_values)); REQUIRE(not same_values(h, zero)); @@ -2296,4 +2300,69 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]") } } } + +#ifndef NDEBUG + SECTION("error") + { + SECTION("different meshes") + { + SECTION("1D") + { + constexpr size_t Dimension = 1; + + std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh1D(); + std::shared_ptr mesh_2 = + std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr()); + + DiscreteFunctionP0<Dimension, double> f1{mesh_1}; + DiscreteFunctionP0<Dimension, double> f2{mesh_2}; + + REQUIRE_THROWS_AS(f1 = f2, AssertError); + REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError); + REQUIRE_THROWS_AS(f1 + f2, AssertError); + REQUIRE_THROWS_AS(f1 - f2, AssertError); + REQUIRE_THROWS_AS(f1 * f2, AssertError); + REQUIRE_THROWS_AS(f1 / f2, AssertError); + } + + SECTION("2D") + { + constexpr size_t Dimension = 2; + + std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh2D(); + std::shared_ptr mesh_2 = + std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr()); + + DiscreteFunctionP0<Dimension, double> f1{mesh_1}; + DiscreteFunctionP0<Dimension, double> f2{mesh_2}; + + REQUIRE_THROWS_AS(f1 = f2, AssertError); + REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError); + REQUIRE_THROWS_AS(f1 + f2, AssertError); + REQUIRE_THROWS_AS(f1 - f2, AssertError); + REQUIRE_THROWS_AS(f1 * f2, AssertError); + REQUIRE_THROWS_AS(f1 / f2, AssertError); + } + + SECTION("3D") + { + constexpr size_t Dimension = 3; + + std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh3D(); + std::shared_ptr mesh_2 = + std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr()); + + DiscreteFunctionP0<Dimension, double> f1{mesh_1}; + DiscreteFunctionP0<Dimension, double> f2{mesh_2}; + + REQUIRE_THROWS_AS(f1 = f2, AssertError); + REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError); + REQUIRE_THROWS_AS(f1 + f2, AssertError); + REQUIRE_THROWS_AS(f1 - f2, AssertError); + REQUIRE_THROWS_AS(f1 * f2, AssertError); + REQUIRE_THROWS_AS(f1 / f2, AssertError); + } + } + } +#endif // NDEBUG }