Skip to content
Snippets Groups Projects
Commit b77081bc authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add a few attributes to ItemValue and precise error messages

parent 6d796584
Branches
No related tags found
1 merge request!133Simplify access functions to the number of items
...@@ -43,7 +43,7 @@ class ItemArray ...@@ -43,7 +43,7 @@ class ItemArray
friend ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityWeakPtr>; friend ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityWeakPtr>;
public: public:
friend PUGS_INLINE ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr> [[nodiscard]] friend PUGS_INLINE ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr>
copy(const ItemArray<DataType, item_type, ConnectivityPtr>& source) copy(const ItemArray<DataType, item_type, ConnectivityPtr>& source)
{ {
ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr> image; ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr> image;
...@@ -62,19 +62,18 @@ class ItemArray ...@@ -62,19 +62,18 @@ class ItemArray
copy_to(const ItemArray<DataType, item_type, ConnectivityPtr>& source, copy_to(const ItemArray<DataType, item_type, ConnectivityPtr>& source,
const ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr2>& destination) const ItemArray<std::remove_const_t<DataType>, item_type, ConnectivityPtr2>& destination)
{ {
Assert(destination.connectivity_ptr() == source.connectivity_ptr()); Assert(destination.connectivity_ptr() == source.connectivity_ptr(), "different connectivities");
Assert(source.sizeOfArrays() == destination.sizeOfArrays(), "incompatible size of arrays")
copy_to(source.m_values, destination.m_values); copy_to(source.m_values, destination.m_values);
} }
PUGS_INLINE [[nodiscard]] PUGS_INLINE bool
bool
isBuilt() const noexcept isBuilt() const noexcept
{ {
return m_connectivity_ptr.use_count() != 0; return m_connectivity_ptr.use_count() != 0;
} }
PUGS_INLINE [[nodiscard]] PUGS_INLINE std::shared_ptr<const IConnectivity>
std::shared_ptr<const IConnectivity>
connectivity_ptr() const noexcept connectivity_ptr() const noexcept
{ {
if constexpr (std::is_same_v<ConnectivityPtr, ConnectivitySharedPtr>) { if constexpr (std::is_same_v<ConnectivityPtr, ConnectivitySharedPtr>) {
...@@ -93,27 +92,26 @@ class ItemArray ...@@ -93,27 +92,26 @@ class ItemArray
} }
template <ItemType item_t> template <ItemType item_t>
PUGS_INLINE typename Table<DataType>::UnsafeRowView [[nodiscard]] PUGS_INLINE typename Table<DataType>::UnsafeRowView
operator[](const ItemIdT<item_t>& item_id) const noexcept(NO_ASSERT) operator[](const ItemIdT<item_t>& item_id) const noexcept(NO_ASSERT)
{ {
static_assert(item_t == item_type, "invalid ItemId type"); static_assert(item_t == item_type, "invalid ItemId type");
Assert(this->isBuilt()); Assert(this->isBuilt(), "ItemArray is not built");
Assert(item_id < this->numberOfItems(), "invalid item_id");
return m_values[item_id]; return m_values[item_id];
} }
PUGS_INLINE [[nodiscard]] PUGS_INLINE size_t
size_t
numberOfItems() const noexcept(NO_ASSERT) numberOfItems() const noexcept(NO_ASSERT)
{ {
Assert(this->isBuilt()); Assert(this->isBuilt(), "ItemArray is not built");
return m_values.numberOfRows(); return m_values.numberOfRows();
} }
PUGS_INLINE [[nodiscard]] PUGS_INLINE size_t
size_t
sizeOfArrays() const sizeOfArrays() const
{ {
Assert(this->isBuilt()); Assert(this->isBuilt(), "ItemArray is not built");
return m_values.numberOfColumns(); return m_values.numberOfColumns();
} }
...@@ -169,7 +167,7 @@ class ItemArray ...@@ -169,7 +167,7 @@ class ItemArray
ItemArray(const IConnectivity& connectivity, const Table<DataType>& table) noexcept(NO_ASSERT) ItemArray(const IConnectivity& connectivity, const Table<DataType>& table) noexcept(NO_ASSERT)
: m_connectivity_ptr{connectivity.shared_ptr()}, m_values{table} : m_connectivity_ptr{connectivity.shared_ptr()}, m_values{table}
{ {
Assert(connectivity.numberOf<item_type>() == table.numberOfRows(), "Invalid table, wrong number of rows"); Assert(connectivity.numberOf<item_type>() == table.numberOfRows(), "invalid table, wrong number of rows");
} }
PUGS_INLINE PUGS_INLINE
......
...@@ -297,16 +297,16 @@ TEST_CASE("ItemArray", "[mesh]") ...@@ -297,16 +297,16 @@ TEST_CASE("ItemArray", "[mesh]")
SECTION("checking for build ItemArray") SECTION("checking for build ItemArray")
{ {
CellArray<int> cell_array; CellArray<int> cell_array;
REQUIRE_THROWS_AS(cell_array[CellId{0}], AssertError); REQUIRE_THROWS_WITH(cell_array[CellId{0}], "ItemArray is not built");
FaceArray<int> face_array; FaceArray<int> face_array;
REQUIRE_THROWS_AS(face_array[FaceId{0}], AssertError); REQUIRE_THROWS_WITH(face_array[FaceId{0}], "ItemArray is not built");
EdgeArray<int> edge_array; EdgeArray<int> edge_array;
REQUIRE_THROWS_AS(edge_array[EdgeId{0}], AssertError); REQUIRE_THROWS_WITH(edge_array[EdgeId{0}], "ItemArray is not built");
NodeArray<int> node_array; NodeArray<int> node_array;
REQUIRE_THROWS_AS(node_array[NodeId{0}], AssertError); REQUIRE_THROWS_WITH(node_array[NodeId{0}], "ItemArray is not built");
} }
SECTION("checking for bounds violation") SECTION("checking for bounds violation")
...@@ -322,19 +322,19 @@ TEST_CASE("ItemArray", "[mesh]") ...@@ -322,19 +322,19 @@ TEST_CASE("ItemArray", "[mesh]")
CellArray<int> cell_array{connectivity, 1}; CellArray<int> cell_array{connectivity, 1};
CellId invalid_cell_id = connectivity.numberOfCells(); CellId invalid_cell_id = connectivity.numberOfCells();
REQUIRE_THROWS_AS(cell_array[invalid_cell_id], AssertError); REQUIRE_THROWS_WITH(cell_array[invalid_cell_id], "invalid item_id");
FaceArray<int> face_array{connectivity, 2}; FaceArray<int> face_array{connectivity, 2};
FaceId invalid_face_id = connectivity.numberOfFaces(); FaceId invalid_face_id = connectivity.numberOfFaces();
REQUIRE_THROWS_AS(face_array[invalid_face_id], AssertError); REQUIRE_THROWS_WITH(face_array[invalid_face_id], "invalid item_id");
EdgeArray<int> edge_array{connectivity, 1}; EdgeArray<int> edge_array{connectivity, 1};
EdgeId invalid_edge_id = connectivity.numberOfEdges(); EdgeId invalid_edge_id = connectivity.numberOfEdges();
REQUIRE_THROWS_AS(edge_array[invalid_edge_id], AssertError); REQUIRE_THROWS_WITH(edge_array[invalid_edge_id], "invalid item_id");
NodeArray<int> node_array{connectivity, 0}; NodeArray<int> node_array{connectivity, 0};
NodeId invalid_node_id = connectivity.numberOfNodes(); NodeId invalid_node_id = connectivity.numberOfNodes();
REQUIRE_THROWS_AS(node_array[invalid_node_id], AssertError); REQUIRE_THROWS_WITH(node_array[invalid_node_id], "invalid item_id");
} }
} }
} }
...@@ -351,7 +351,39 @@ TEST_CASE("ItemArray", "[mesh]") ...@@ -351,7 +351,39 @@ TEST_CASE("ItemArray", "[mesh]")
const Connectivity<3>& connectivity = mesh_3d->connectivity(); const Connectivity<3>& connectivity = mesh_3d->connectivity();
Table<size_t> values{connectivity.numberOfCells() + 3, 3}; Table<size_t> values{connectivity.numberOfCells() + 3, 3};
REQUIRE_THROWS_WITH(CellArray<size_t>(connectivity, values), "Invalid table, wrong number of rows"); REQUIRE_THROWS_WITH(CellArray<size_t>(connectivity, values), "invalid table, wrong number of rows");
}
}
}
SECTION("invalid copy_to")
{
std::array mesh_list = MeshDataBaseForTests::get().all2DMeshes();
for (auto named_mesh : mesh_list) {
SECTION(named_mesh.name())
{
auto mesh_2d = named_mesh.mesh();
const Connectivity<2>& connectivity_2d = mesh_2d->connectivity();
std::array mesh_list = MeshDataBaseForTests::get().all3DMeshes();
for (auto named_mesh : mesh_list) {
SECTION(named_mesh.name())
{
auto mesh_3d = named_mesh.mesh();
const Connectivity<3>& connectivity_3d = mesh_3d->connectivity();
CellArray<int> cell_2d_array{connectivity_2d, 3};
CellArray<int> cell_3d_array{connectivity_3d, 3};
REQUIRE_THROWS_WITH(copy_to(cell_2d_array, cell_3d_array), "different connectivities");
CellArray<int> cell_2d_array2{connectivity_2d, 2};
REQUIRE_THROWS_WITH(copy_to(cell_2d_array, cell_2d_array2), "incompatible size of arrays");
}
}
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment