1 #include "Graph/HashGraph.h"
2 #include <string>
3 #include <gtest/gtest.h>
4
5 using namespace std;
6
7 namespace {
8
9 class HashGraphTest : public ::testing::Test {
10
11 protected:
12
13 typedef HashGraph<string> Graph;
14 typedef boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
15 typedef boost::graph_traits<Graph>::out_edge_iterator out_edge_iterator;
16 typedef boost::graph_traits<Graph>::in_edge_iterator in_edge_iterator;
17 typedef boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
18 typedef boost::graph_traits<Graph>::vertex_iterator vertex_iterator;
19
20 Graph simpleCyclicGraph;
21
22 string a;
23 string b;
24 string c;
25 string d;
26
27 unordered_set<string> vertexSet;
28
HashGraphTest()29 HashGraphTest() : a("a"), b("b"), c("c"), d("d") {
30
31 add_edge(a, b, simpleCyclicGraph);
32 add_edge(a, c, simpleCyclicGraph);
33 add_edge(b, d, simpleCyclicGraph);
34 add_edge(c, d, simpleCyclicGraph);
35
36 vertexSet.insert(a);
37 vertexSet.insert(b);
38 vertexSet.insert(c);
39 vertexSet.insert(d);
40
41 }
42 };
43
TEST_F(HashGraphTest,out_edge_iterator)44 TEST_F(HashGraphTest, out_edge_iterator)
45 {
46 edge_descriptor expectedEdge1(a, b);
47 edge_descriptor expectedEdge2(a, c);
48
49 out_edge_iterator ei, ei_end;
50 boost::tie(ei, ei_end) = out_edges(a, simpleCyclicGraph);
51
52 ASSERT_TRUE(ei != ei_end);
53 edge_descriptor edge1 = *ei;
54 EXPECT_TRUE(edge1 == expectedEdge1 || edge1 == expectedEdge2);
55
56 ei++;
57 ASSERT_TRUE(ei != ei_end);
58 edge_descriptor edge2 = *ei;
59 EXPECT_TRUE(edge2 != edge1);
60 EXPECT_TRUE(edge2 == expectedEdge1 || edge2 == expectedEdge2);
61
62 ei++;
63 EXPECT_TRUE(ei == ei_end);
64 }
65
TEST_F(HashGraphTest,vertex_iterator)66 TEST_F(HashGraphTest, vertex_iterator)
67 {
68 vertex_iterator vi, vi_begin, vi_end;
69 boost::tie(vi_begin, vi_end) = vertices(simpleCyclicGraph);
70 ASSERT_TRUE(vi_begin != vi_end);
71
72 unsigned count = 0;
73 vertex_descriptor v;
74 vi = vi_begin;
75 for(; vi != vi_end; vi++, count++) {
76 // check that current vertex is different from
77 // previous vertex
78 if (vi != vi_begin) {
79 EXPECT_TRUE(*vi != v);
80 }
81 vertex_descriptor v = *vi;
82 EXPECT_TRUE(vertexSet.find(v) != vertexSet.end());
83 }
84
85 EXPECT_EQ(4U, count);
86 }
87
88 }
89