| 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 | /*! |
| 20 | * |
| 21 | * Test node and edge |
| 22 | * |
| 23 | */ |
| 24 | |
| 25 | struct ne_cp |
| 26 | { |
| 27 | //! The node contain several properties |
| 28 | typedef boost::fusion::vector<float,float,float,double,long int,int,std::string> type; |
| 29 | |
| 30 | //! The data |
| 31 | type data; |
| 32 | |
| 33 | //! x property id in boost::fusion::vector |
| 34 | static const unsigned int x = 0; |
| 35 | //! y property id in boost::fusion::vector |
| 36 | static const unsigned int y = 1; |
| 37 | //! z property id in boost::fusion::vector |
| 38 | static const unsigned int z = 2; |
| 39 | //! double_num property id in boost::fusion::vector |
| 40 | static const unsigned int double_num = 3; |
| 41 | //! long_num property id in boost::fusion::vector |
| 42 | static const unsigned int long_num = 4; |
| 43 | //! integer property id in boost::fusion::vector |
| 44 | static const unsigned int integer = 5; |
| 45 | //! string property id in boost::fusion::vector |
| 46 | static const unsigned int string = 6; |
| 47 | //! total number of properties boost::fusion::vector |
| 48 | static const unsigned int max_prop = 7; |
| 49 | |
| 50 | //! get x |
| 51 | float & get_x() {return boost::fusion::at_c<x>(data);} |
| 52 | //! get y |
| 53 | float & get_y() {return boost::fusion::at_c<y>(data);} |
| 54 | //! get z |
| 55 | float & get_z() {return boost::fusion::at_c<z>(data);} |
| 56 | //! get double number |
| 57 | double & get_dn() {return boost::fusion::at_c<double_num>(data);} |
| 58 | //! get long number |
| 59 | long int & get_ln() {return boost::fusion::at_c<long_num>(data);} |
| 60 | //! get integer |
| 61 | int & get_i() {return boost::fusion::at_c<integer>(data);} |
| 62 | //! get string |
| 63 | std::string & get_str() {return boost::fusion::at_c<string>(data);} |
| 64 | |
| 65 | //! define attributes names |
| 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 | |
| 76 | //! type of the spatial information |
| 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 | |
| 90 | Graph_CSR<ne_cp,ne_cp> g_csr2; |
| 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 |
| 122 | GraphMLWriter<Graph_CSR<ne_cp,ne_cp>> gv2(g_csr2); |
| 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 | |
| 130 | //! Create a graph |
| 131 | |
| 132 | CartesianGraphFactory<3,Graph_CSR<ne_cp,ne_cp>> g_factory; |
| 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 |
| 146 | GraphMLWriter<Graph_CSR<ne_cp,ne_cp>> gw(g_csr); |
| 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_ */ |
| 159 | |