From 0c85ec084f0eaf89cbcdfcbb736d29a9fcda3a59 Mon Sep 17 00:00:00 2001 From: sbaldu Date: Mon, 2 Oct 2023 23:54:55 +0200 Subject: [PATCH 1/2] Add tests for overloads of addEdge --- test/GraphTest.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/GraphTest.cpp b/test/GraphTest.cpp index 3641c8d1f..9f23151c4 100644 --- a/test/GraphTest.cpp +++ b/test/GraphTest.cpp @@ -1,4 +1,7 @@ +#include +#include +#include #include #include "CXXGraph/CXXGraph.hpp" @@ -207,6 +210,44 @@ TEST(GraphTest, RawAddEdge_3) { ASSERT_FALSE(graph.isUndirectedGraph()); } +TEST(GraphTest, AddEdgeWeight_raw) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 1); + CXXGraph::Node node3("3", 1); + CXXGraph::DirectedWeightedEdge edge1(1, node1, node2, 3); + CXXGraph::UndirectedWeightedEdge edge2(2, node1, node3, 5); + CXXGraph::Graph graph; + + graph.addEdge(&edge1); + graph.addEdge(&edge2); + + // Check that the edges are weighted + ASSERT_TRUE((*graph.getEdge(1))->isWeighted()); + ASSERT_TRUE((*graph.getEdge(2))->isWeighted()); + // Check the value of the weights + ASSERT_EQ(std::dynamic_pointer_cast(*graph.getEdge(1))->getWeight(), 3); + ASSERT_EQ(std::dynamic_pointer_cast(*graph.getEdge(2))->getWeight(), 5); +} + +TEST(GraphTest, AddEdgeWeight_shared) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 1); + CXXGraph::Node node3("3", 1); + CXXGraph::DirectedWeightedEdge edge1(1, node1, node2, 3); + CXXGraph::UndirectedWeightedEdge edge2(2, node1, node3, 5); + CXXGraph::Graph graph; + + graph.addEdge(make_shared>(edge1)); + graph.addEdge(make_shared>(edge2)); + + // Check that the edges are weighted + ASSERT_TRUE((*graph.getEdge(1))->isWeighted()); + ASSERT_TRUE((*graph.getEdge(2))->isWeighted()); + // Check the value of the weights + ASSERT_EQ(std::dynamic_pointer_cast(*graph.getEdge(1))->getWeight(), 3); + ASSERT_EQ(std::dynamic_pointer_cast(*graph.getEdge(2))->getWeight(), 5); +} + TEST(GraphTest, DirectedEdgeCycle_1) { CXXGraph::Node node1("a", 1); CXXGraph::Node node2("b", 1); From 754fddf1abc4d6ed7b50766f667d6db7ca7cc754 Mon Sep 17 00:00:00 2001 From: sbaldu Date: Tue, 3 Oct 2023 10:02:20 +0200 Subject: [PATCH 2/2] Add dynamic_cast in raw pointer overload of addEdge --- include/CXXGraph/Graph/Graph.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/CXXGraph/Graph/Graph.hpp b/include/CXXGraph/Graph/Graph.hpp index 166766bc3..9c108bd2d 100644 --- a/include/CXXGraph/Graph/Graph.hpp +++ b/include/CXXGraph/Graph/Graph.hpp @@ -861,7 +861,8 @@ template void Graph::addEdge(const Edge *edge) { if (edge->isDirected().has_value() && edge->isDirected().value()) { if (edge->isWeighted().has_value() && edge->isWeighted().value()) { - auto edge_shared = make_shared>(*edge); + auto edge_shared = make_shared>( + *dynamic_cast *>(edge)); this->edgeSet.insert(edge_shared); std::pair>, shared>> elem = { @@ -879,7 +880,8 @@ void Graph::addEdge(const Edge *edge) { } } else { if (edge->isWeighted().has_value() && edge->isWeighted().value()) { - auto edge_shared = make_shared>(*edge); + auto edge_shared = make_shared>( + *dynamic_cast *>(edge)); this->edgeSet.insert(edge_shared); std::pair>, shared>> elem = {