Skip to content

Commit 19da072

Browse files
committed
Add success flag for addEdge
1 parent 183dec2 commit 19da072

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

include/CXXGraph/Graph/Graph_decl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,10 @@ class Graph {
170170
* Note: No Thread Safe
171171
*
172172
* @param edge The Edge to insert
173+
* @returns True if the edge was successfully added to the graph
173174
*
174175
*/
175-
virtual void addEdge(const Edge<T> *edge);
176+
virtual bool addEdge(const Edge<T> *edge);
176177

177178
/**
178179
* \brief

include/CXXGraph/Graph/Graph_impl.hpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,15 @@ void Graph<T>::setEdgeSet(const T_EdgeSet<T> &edgeSet) {
7070
}
7171

7272
template <typename T>
73-
void Graph<T>::addEdge(const Edge<T> *edge) {
73+
bool Graph<T>::addEdge(const Edge<T> *edge) {
7474
shared<const Edge<T>> edge_shared;
7575

76-
bool is_directed = edge->isDirected().value_or(false);
77-
bool is_weighted = edge->isWeighted().value_or(false);
76+
if(!edge->isDirected() || !edge->isWeighted()) {
77+
return false;
78+
}
79+
80+
bool is_directed = edge->isDirected().value();
81+
bool is_weighted = edge->isWeighted().value();
7882

7983
if (is_directed) {
8084
if (is_weighted) {
@@ -93,6 +97,8 @@ void Graph<T>::addEdge(const Edge<T> *edge) {
9397
}
9498

9599
addEdge(edge_shared);
100+
101+
return true;
96102
}
97103

98104
template <typename T>

test/GraphTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,24 @@ TEST(GraphTest, RawAddEdge_3) {
210210
ASSERT_FALSE(graph.isUndirectedGraph());
211211
}
212212

213+
TEST(GraphTest, AddEdge_ReturnsFailureFlag) {
214+
CXXGraph::Node<int> node1("1", 1);
215+
CXXGraph::Node<int> node2("2", 1);
216+
CXXGraph::Node<int> node3("3", 1);
217+
218+
CXXGraph::Edge<int> edge1(1, node1, node2);
219+
CXXGraph::Edge<int> edge2(2, node1, node3);
220+
CXXGraph::Edge<int> edge3(3, node2, node3);
221+
222+
CXXGraph::Graph<int> graph;
223+
224+
ASSERT_FALSE(graph.addEdge(&edge1));
225+
ASSERT_FALSE(graph.addEdge(&edge2));
226+
ASSERT_FALSE(graph.addEdge(&edge3));
227+
228+
ASSERT_EQ(graph.getEdgeSet().size(), 0);
229+
}
230+
213231
TEST(GraphTest, AddEdgeWeight_raw) {
214232
CXXGraph::Node<int> node1("1", 1);
215233
CXXGraph::Node<int> node2("2", 1);

0 commit comments

Comments
 (0)