OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
GraphMLWriter_unit_tests.hpp
1 /*
2  * GraphMLWriter_unit_tests.hpp
3  *
4  * Created on: Dec 9, 2014
5  * Author: i-bird
6  */
7 
8 #ifndef GRAPHMLWRITER_UNIT_TESTS_HPP_
9 #define GRAPHMLWRITER_UNIT_TESTS_HPP_
10 
11 #define GS_SIZE 8
12 
13 #include "GraphMLWriter.hpp"
14 #include "Graph/CartesianGraphFactory.hpp"
15 #include "util/util.hpp"
16 
17 BOOST_AUTO_TEST_SUITE( graphml_writer_test )
18 
19 
25 struct ne_cp
26 {
28  typedef boost::fusion::vector<float,float,float,double,long int,int,std::string> type;
29 
31  type data;
32 
34  static const unsigned int x = 0;
36  static const unsigned int y = 1;
38  static const unsigned int z = 2;
40  static const unsigned int double_num = 3;
42  static const unsigned int long_num = 4;
44  static const unsigned int integer = 5;
46  static const unsigned int string = 6;
48  static const unsigned int max_prop = 7;
49 
51  float & get_x() {return boost::fusion::at_c<x>(data);}
53  float & get_y() {return boost::fusion::at_c<y>(data);}
55  float & get_z() {return boost::fusion::at_c<z>(data);}
57  double & get_dn() {return boost::fusion::at_c<double_num>(data);}
59  long int & get_ln() {return boost::fusion::at_c<long_num>(data);}
61  int & get_i() {return boost::fusion::at_c<integer>(data);}
63  std::string & get_str() {return boost::fusion::at_c<string>(data);}
64 
66  struct attributes
67  {
68  static const std::string name[max_prop];
69  };
70 
71  static inline bool noPointers()
72  {
73  return true;
74  }
75 
77  typedef float s_type;
78 };
79 
80 // Initialize the attributes strings array
81 const std::string ne_cp::attributes::name[] = {"x","y","z","double_num","long_num","integer","string"};
82 
83 BOOST_AUTO_TEST_CASE( graphml_writer_use)
84 {
85  Vcluster & v_cl = create_vcluster();
86 
87  if (v_cl.getProcessUnitID() != 0)
88  return;
89 
91 
92  // Add 4 vertex and connect
93 
94  struct ne_cp n1;
95  n1.get_x() = 1.0;
96  n1.get_y() = 2.0;
97  n1.get_z() = 3.0;
98  n1.get_dn() = 4.0;
99  n1.get_ln() = 5.0;
100  n1.get_i() = 6.0;
101  n1.get_str() = std::string("test");
102  g_csr2.addVertex(n1);
103  n1.get_str() = std::string("tes2");
104  g_csr2.addVertex(n1);
105  n1.get_str() = std::string("test3");
106  g_csr2.addVertex(n1);
107  n1.get_str() = std::string("test4");
108  g_csr2.addVertex(n1);
109  n1.get_str() = std::string("test5");
110 
111  g_csr2.addEdge(0,1,n1);
112  n1.get_str() = std::string("test6");
113  g_csr2.addEdge(2,1,n1);
114  n1.get_str() = std::string("test7");
115  g_csr2.addEdge(3,1,n1);
116  n1.get_str() = std::string("test8");
117  g_csr2.addEdge(2,0,n1);
118  n1.get_str() = std::string("test9");
119  g_csr2.addEdge(3,2,n1);
120 
121  // Create a graph ML
123  gv2.write("test_graph2.graphml");
124 
125  // check that match
126 
127  bool test = compare("test_graph2.graphml","test_data/test_graph2_test.graphml");
128  BOOST_REQUIRE_EQUAL(true,test);
129 
131 
133 
134  // Cartesian grid
135  size_t sz[] = {GS_SIZE,GS_SIZE,GS_SIZE};
136 
137  // Box
138  Box<3,float> box({0.0,0.0,0.0},{1.0,1.0,1.0});
139 
140  // Boundary conditions, non periodic
141  size_t bc[] = {NON_PERIODIC,NON_PERIODIC,NON_PERIODIC};
142 
143  Graph_CSR<ne_cp,ne_cp> g_csr = g_factory.construct<5,NO_VERTEX_ID,float,2,ne_cp::x,ne_cp::y,ne_cp::z>(sz,box,bc);
144 
145  // Create a graph ML
147  gw.write("test_graph.graphml");
148 
149 
150  // check that match
151  test = compare("test_graph.graphml","test_data/test_graph_test.graphml");
152  BOOST_REQUIRE_EQUAL(true,test);
153 }
154 
155 BOOST_AUTO_TEST_SUITE_END()
156 
157 
158 #endif /* GRAPHMLWRITER_UNIT_TESTS_HPP_ */
float & get_x()
get x
float s_type
type of the spatial information
void addVertex(const V &vrt)
add vertex
Definition: map_graph.hpp:844
size_t getProcessUnitID()
Get the process unit id.
float & get_y()
get y
type data
The data.
std::string & get_str()
get string
float & get_z()
get z
Implementation of VCluster class.
Definition: VCluster.hpp:36
int & get_i()
get integer
double & get_dn()
get double number
This class construct a cartesian graph.
boost::fusion::vector< float, float, float, double, long int, int, std::string > type
The node contain several properties.
define attributes names
long int & get_ln()
get long number
static const unsigned int z
z property id in boost::fusion::vector
Structure that store a graph in CSR format or basically in compressed adjacency matrix format...
Definition: map_graph.hpp:83
auto addEdge(size_t v1, size_t v2, const E &ed) -> decltype(e.get(0))
add edge on the graph
Definition: map_graph.hpp:884
static Graph construct(const size_t(&sz)[dim], Box< dim, T > dom, const size_t(&bc)[dim])
Construct a cartesian graph, with V and E edge properties.
static const unsigned int x
x property id in boost::fusion::vector
static const unsigned int y
y property id in boost::fusion::vector