diff --git a/test/BFSTest.cpp b/test/BFSTest.cpp index 27a71b03..b8819cd5 100644 --- a/test/BFSTest.cpp +++ b/test/BFSTest.cpp @@ -339,3 +339,123 @@ TEST(BFSTest, test_13) { } } } + + +// Next 3 test cases on parallel edges on BFS +TEST(BFSTest, test_14) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 2); + CXXGraph::Node node3("3", 3); + std::pair *, const CXXGraph::Node *> pairNode( + &node1, &node2); + CXXGraph::DirectedWeightedEdge edge1(1, pairNode, 1); + CXXGraph::DirectedWeightedEdge edge2(2, node2, node3, 1); + CXXGraph::DirectedWeightedEdge edge4(4, node2, node3, 6); + CXXGraph::UndirectedWeightedEdge edge3(3, node1, node3, 6); + CXXGraph::T_EdgeSet edgeSet; + edgeSet.insert(make_shared>(edge1)); + edgeSet.insert(make_shared>(edge2)); + edgeSet.insert(make_shared>(edge3)); + edgeSet.insert(make_shared>(edge4)); + CXXGraph::Graph graph(edgeSet); + std::vector> res = graph.breadth_first_search(node1); + ASSERT_EQ(res.size(), 3); + ASSERT_TRUE(std::find(res.begin(), res.end(), node1) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node2) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node3) != res.end()); +} + +TEST(BFSTest, test_15) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 2); + CXXGraph::Node node3("3", 3); + std::pair *, const CXXGraph::Node *> pairNode( + &node1, &node2); + CXXGraph::DirectedWeightedEdge edge1(1, pairNode, 1); + CXXGraph::DirectedWeightedEdge edge2(2, node2, node3, 1); + CXXGraph::UndirectedWeightedEdge edge3(3, node1, node3, 6); + CXXGraph::DirectedWeightedEdge edge4(4, node1, node3, 6); + CXXGraph::T_EdgeSet edgeSet; + edgeSet.insert(make_shared>(edge1)); + edgeSet.insert(make_shared>(edge2)); + edgeSet.insert(make_shared>(edge3)); + edgeSet.insert(make_shared>(edge4)); + CXXGraph::Graph graph(edgeSet); + std::vector> res = graph.breadth_first_search(node2); + ASSERT_EQ(res.size(), 3); + ASSERT_TRUE(std::find(res.begin(), res.end(), node1) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node2) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node3) != res.end()); +} + +TEST(BFSTest, test_16) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 2); + CXXGraph::Node node3("3", 3); + std::pair *, const CXXGraph::Node *> pairNode( + &node1, &node2); + CXXGraph::DirectedWeightedEdge edge1(1, pairNode, 1); + CXXGraph::DirectedWeightedEdge edge2(2, node2, node3, 1); + CXXGraph::UndirectedWeightedEdge edge3(3, node1, node3, 6); + CXXGraph::DirectedWeightedEdge edge4(4, node1, node3, 6); + CXXGraph::T_EdgeSet edgeSet; + edgeSet.insert(make_shared>(edge1)); + edgeSet.insert(make_shared>(edge2)); + edgeSet.insert(make_shared>(edge4)); + edgeSet.insert(make_shared>(edge3)); + CXXGraph::Graph graph(edgeSet); + std::vector> res = graph.breadth_first_search(node2); + ASSERT_EQ(res.size(), 3); + ASSERT_TRUE(std::find(res.begin(), res.end(), node1) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node2) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node3) != res.end()); +} + +// The next 2 testcases on parallel edges on concurency BFS +TEST(BFSTest, test_17) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 2); + CXXGraph::Node node3("3", 3); + std::pair *, const CXXGraph::Node *> pairNode( + &node1, &node2); + CXXGraph::DirectedWeightedEdge edge1(1, pairNode, 1); + CXXGraph::DirectedWeightedEdge edge2(2, node2, node3, 1); + CXXGraph::UndirectedWeightedEdge edge3(3, node1, node3, 6); + CXXGraph::DirectedWeightedEdge edge4(4, node1, node3, 6); + CXXGraph::T_EdgeSet edgeSet; + edgeSet.insert(make_shared>(edge1)); + edgeSet.insert(make_shared>(edge2)); + edgeSet.insert(make_shared>(edge3)); + edgeSet.insert(make_shared>(edge4)); + CXXGraph::Graph graph(edgeSet); + std::vector> res = + graph.concurrency_breadth_first_search(node2, 4); + ASSERT_EQ(res.size(), 3); + ASSERT_TRUE(std::find(res.begin(), res.end(), node1) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node2) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node3) != res.end()); +} + +TEST(BFSTest, test_18) { + CXXGraph::Node node1("1", 1); + CXXGraph::Node node2("2", 2); + CXXGraph::Node node3("3", 3); + std::pair *, const CXXGraph::Node *> pairNode( + &node1, &node2); + CXXGraph::DirectedWeightedEdge edge1(1, pairNode, 1); + CXXGraph::DirectedWeightedEdge edge2(2, node2, node3, 1); + CXXGraph::UndirectedWeightedEdge edge3(3, node1, node3, 6); + CXXGraph::DirectedWeightedEdge edge4(4, node1, node3, 6); + CXXGraph::T_EdgeSet edgeSet; + edgeSet.insert(make_shared>(edge1)); + edgeSet.insert(make_shared>(edge2)); + edgeSet.insert(make_shared>(edge4)); + edgeSet.insert(make_shared>(edge3)); + CXXGraph::Graph graph(edgeSet); + std::vector> res = + graph.concurrency_breadth_first_search(node2, 4); + ASSERT_EQ(res.size(), 3); + ASSERT_TRUE(std::find(res.begin(), res.end(), node1) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node2) != res.end()); + ASSERT_TRUE(std::find(res.begin(), res.end(), node3) != res.end()); +} \ No newline at end of file