1 #ifndef DIST_MAP_GRAPH_UNIT_TEST_HPP 
    2 #define DIST_MAP_GRAPH_UNIT_TEST_HPP 
    4 #include "Graph/DistGraphFactory.hpp" 
    5 #include "Graph/dist_map_graph.hpp" 
    6 #include "Packer_Unpacker/Packer.hpp" 
    7 #include "Packer_Unpacker/Unpacker.hpp" 
    9 #define DGRAPH_GS_SIZE 4 
   13     typedef boost::fusion::vector<float[3]> type;
 
   18         static const std::string name[];
 
   28     static const unsigned int x = 0;
 
   37     inline vx(
const vx & p)
 
   39         boost::fusion::at_c<0>(
data)[0] = boost::fusion::at_c<0>(p.
data)[0];
 
   40         boost::fusion::at_c<0>(
data)[1] = boost::fusion::at_c<0>(p.
data)[1];
 
   41         boost::fusion::at_c<0>(
data)[2] = boost::fusion::at_c<0>(p.
data)[2];
 
   44     template<
unsigned int id> 
inline auto get() -> decltype(boost::fusion::at_c < id > (
data))
 
   46         return boost::fusion::at_c<id>(
data);
 
   49     template<
unsigned int id> 
inline auto get() 
const -> 
const decltype(boost::fusion::at_c < id > (
data))
 
   51         return boost::fusion::at_c<id>(
data);
 
   61         boost::fusion::at_c<0>(
data)[0] = p.template get<0>()[0];
 
   62         boost::fusion::at_c<0>(
data)[1] = p.template get<0>()[1];
 
   63         boost::fusion::at_c<0>(
data)[2] = p.template get<0>()[2];
 
   68     static bool noPointers()
 
   74 const std::string vx::attributes::name[] = { 
"x" };
 
   78     typedef boost::fusion::vector<size_t> type;
 
   83         static const std::string name[];
 
   90     static const unsigned int prop = 0;
 
   99     template<
unsigned int id> 
inline auto get() -> decltype(boost::fusion::at_c < id > (
data))
 
  101         return boost::fusion::at_c<id>(
data);
 
  111         boost::fusion::at_c<0>(
data) = p.template get<0>();
 
  116     static bool noPointers()
 
  122 const std::string ed::attributes::name[] = { 
"prop" };
 
  124 BOOST_AUTO_TEST_SUITE (dist_map_graph_test)
 
  126 BOOST_AUTO_TEST_CASE( dist_map_graph_use)
 
  136     size_t sz[2] = { DGRAPH_GS_SIZE, DGRAPH_GS_SIZE };
 
  165         for(
size_t i = 0; i < 4; i++)
 
  171         for(
size_t i = 0; i < 4; i++)
 
  177         for(
size_t i = 0; i < 2; i++)
 
  183         for(
size_t i = 0; i < 4; i++)
 
  197         BOOST_REQUIRE_EQUAL(gd.
getChild(0,0), 1ul);
 
  198         BOOST_REQUIRE_EQUAL(gd.
getChild(0,1), 14ul);
 
  199         BOOST_REQUIRE_EQUAL(gd.
getChild(0,2), 4ul);
 
  201         BOOST_REQUIRE_EQUAL(gd.
getChild(1,0), 2ul);
 
  202         BOOST_REQUIRE_EQUAL(gd.
getChild(1,1), 0ul);
 
  203         BOOST_REQUIRE_EQUAL(gd.
getChild(1,2), 15ul);
 
  204         BOOST_REQUIRE_EQUAL(gd.
getChild(1,3), 5ul);
 
  206         BOOST_REQUIRE_EQUAL(gd.
getChild(2,0), 3ul);
 
  207         BOOST_REQUIRE_EQUAL(gd.
getChild(2,1), 1ul);
 
  208         BOOST_REQUIRE_EQUAL(gd.
getChild(2,2), 8ul);
 
  209         BOOST_REQUIRE_EQUAL(gd.
getChild(2,3), 6ul);
 
  211         BOOST_REQUIRE_EQUAL(gd.
getChild(3,0), 2ul);
 
  212         BOOST_REQUIRE_EQUAL(gd.
getChild(3,1), 9ul);
 
  213         BOOST_REQUIRE_EQUAL(gd.
getChild(3,2), 7ul);
 
  241 BOOST_AUTO_TEST_CASE( dist_map_graph_use_redistribution)
 
  250     size_t sz[2] = { 4, 4 };
 
  291     gv2.write(
"dist_graph_redistribution_0.vtk");
 
  295         bool test = compare(
"dist_graph_redistribution_0.vtk", 
"src/Graph/test_data/dist_graph_redistribution_0_test.vtk");
 
  296         BOOST_REQUIRE_EQUAL(
true,test);
 
  313     gv2.write(
"dist_graph_redistribution_1.vtk");
 
  317         bool test = compare(
"dist_graph_redistribution_1.vtk",
"src/Graph/test_data/dist_graph_redistribution_1_test.vtk");
 
  318         BOOST_REQUIRE_EQUAL(
true,test);
 
  324 BOOST_AUTO_TEST_CASE( dist_map_graph_use_free_add)
 
  338     for (
size_t i = 0; i < 4; ++i)
 
  342         v.get<
vx::x>()[1] = i;
 
  343         v.get<
vx::x>()[2] = 0;
 
  398         for (
size_t i = 0; i < 4; ++i)
 
  406         for (
size_t i = 8, j = 0; i < 12 && j < gd.
getNVertex(); ++i, ++j)
 
  449     gv2.write(
"dist_graph_free_0.vtk");
 
  453         bool test = compare(
"dist_graph_free_0.vtk", 
"src/Graph/test_data/dist_graph_free_0_test.vtk");
 
  454         BOOST_REQUIRE_EQUAL(
true,test);
 
  471     gv2.write(
"dist_graph_free_1.vtk");
 
  475         bool test = compare(
"dist_graph_free_1.vtk", 
"src/Graph/test_data/dist_graph_free_1_test.vtk");
 
  476         BOOST_REQUIRE_EQUAL(
true,test);
 
  480 BOOST_AUTO_TEST_CASE( dist_map_graph_use_multi_free_add)
 
  541 BOOST_AUTO_TEST_SUITE_END()
 
void syncEdge()
Execute a synchronization through processor to finalize the add of the edges requested in the e_queue...
 
static const unsigned int max_prop
total number of properties boost::fusion::vector 
 
void add_vertex(const V &vrt, size_t id, size_t gid)
Add vertex vrt with global id and id properties. 
 
void q_move(size_t i, size_t t)
Prepare to send vertex i from the local processor to the target processor. 
 
size_t getChild(size_t v, size_t i) const 
Get the child edge. 
 
size_t getProcessUnitID()
Get the process unit id. 
 
static const unsigned int x
x property id in boost::fusion::vector 
 
void reqVertex(size_t gid)
Put a vertex request in queue. 
 
void deleteGhosts()
Remove all the ghosts from this graph. 
 
static const unsigned int prop
srcgid property id in boost::fusion::vector 
 
size_t getNVertex() const 
Return the number of the vertices in this subgraph. 
 
void sync()
Execute all vertex requests and add them as ghosts inside this graph, they will be available until a ...
 
Implementation of VCluster class. 
 
size_t getVertexId(size_t i) const 
Get the id of a vertex given its index position. 
 
static const unsigned int max_prop
total number of properties boost::fusion::vector 
 
Structure that store a graph in CSR format or basically in compressed adjacency matrix format...
 
void redistribute()
Redistribute function that wraps different stages of the redistribution. 
 
This class represent an N-dimensional box. 
 
size_t getNChilds(size_t c) const 
Return the number of children of a vertex. 
 
This class construct a cartesian graph. 
 
void add_edge(size_t v1, size_t v2)
Add an edge between vertices v1 end v2, needs syncEdge() to complete the action. 
 
size_t getProcessingUnits()
Get the total number of processors. 
 
auto vertex(size_t id) -> decltype(v.get(id))
Function to access the vertexes. 
 
void init()
Once added all the vertices this function must be called to initialize all the properties, useless if a graph factory is used. 
 
float s_type
type of the positional field