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

Add Partitioner tests

parent fdab3fbc
No related branches found
No related tags found
1 merge request!63Feature/utils coverage
......@@ -26,7 +26,7 @@ Partitioner::partition(const CRSGraph& graph)
std::vector<float> tpwgts(npart, 1. / npart);
std::vector<float> ubvec{1.05};
std::vector<int> options{1, 1, 0};
std::vector<int> options{1, 0, 0};
int edgecut = 0;
Array<int> part(0);
......@@ -66,9 +66,11 @@ Partitioner::partition(const CRSGraph& graph)
int result =
ParMETIS_V3_PartKway(&(vtxdist[0]), entries_ptr, neighbors_ptr, NULL, NULL, &wgtflag, &numflag, &ncon, &npart,
&(tpwgts[0]), &(ubvec[0]), &(options[0]), &edgecut, &(part[0]), &parmetis_comm);
// LCOV_EXCL_START
if (result == METIS_ERROR) {
throw UnexpectedError("Metis Error");
}
// LCOV_EXCL_STOP
MPI_Comm_free(&parmetis_comm);
}
......@@ -81,9 +83,11 @@ Partitioner::partition(const CRSGraph& graph)
#else // PUGS_HAS_MPI
Array<int>
Partitioner::partition(const CRSGraph&)
Partitioner::partition(const CRSGraph& graph)
{
return Array<int>(0);
Array<int> partition{graph.entries().size() - 1};
partition.fill(0);
return partition;
}
#endif // PUGS_HAS_MPI
......@@ -94,6 +94,7 @@ add_executable (unit_tests
add_executable (mpi_unit_tests
mpi_test_main.cpp
test_Messenger.cpp
test_Partitioner.cpp
)
add_library(test_Pugs_MeshDataBase
......
#ifndef TEST_PARTITIONER_HPP
#define TEST_PARTITIONER_HPP
#include <catch2/catch.hpp>
#include <utils/Messenger.hpp>
#include <utils/Partitioner.hpp>
#include <set>
// clazy:excludeall=non-pod-global-static
TEST_CASE("Partitioner", "[utils]")
{
SECTION("one graph split to all")
{
Partitioner partitioner;
std::vector<int> entries_vector;
std::vector<int> neighbors_vector;
entries_vector.push_back(neighbors_vector.size());
if (parallel::rank() == 0) {
neighbors_vector.push_back(1);
neighbors_vector.push_back(2);
neighbors_vector.push_back(4);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(0);
neighbors_vector.push_back(3);
neighbors_vector.push_back(5);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(0);
neighbors_vector.push_back(2);
neighbors_vector.push_back(5);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(0);
neighbors_vector.push_back(2);
neighbors_vector.push_back(5);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(3);
neighbors_vector.push_back(5);
neighbors_vector.push_back(7);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(3);
neighbors_vector.push_back(5);
neighbors_vector.push_back(6);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(5);
neighbors_vector.push_back(6);
neighbors_vector.push_back(7);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(3);
neighbors_vector.push_back(5);
neighbors_vector.push_back(7);
entries_vector.push_back(neighbors_vector.size());
neighbors_vector.push_back(4);
neighbors_vector.push_back(6);
neighbors_vector.push_back(7);
entries_vector.push_back(neighbors_vector.size());
}
Array<int> entries = convert_to_array(entries_vector);
Array<int> neighbors = convert_to_array(neighbors_vector);
CRSGraph graph{entries, neighbors};
Array<int> partitioned = partitioner.partition(graph);
REQUIRE((partitioned.size() + 1) == entries.size());
if (parallel::rank() == 0) {
std::set<int> assigned_ranks;
for (size_t i = 0; i < partitioned.size(); ++i) {
assigned_ranks.insert(partitioned[i]);
}
REQUIRE(assigned_ranks.size() == parallel::size());
}
}
}
#endif // TEST_PARTITIONER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment