File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -70,11 +70,15 @@ void Graph<T>::setEdgeSet(const T_EdgeSet<T> &edgeSet) {
7070}
7171
7272template <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
98104template <typename T>
Original file line number Diff line number Diff 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+
213231TEST (GraphTest, AddEdgeWeight_raw) {
214232 CXXGraph::Node<int > node1 (" 1" , 1 );
215233 CXXGraph::Node<int > node2 (" 2" , 1 );
You can’t perform that action at this time.
0 commit comments