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