44
55namespace SingleSourceShortestPathBellmanFord
66{
7- UnitTestHelper unitTestHelper;
8-
9- TEST (BellmanFordTest, SimpleTest)
10- {
11- Graph graph;
12-
13- graph.PushDirectedEdge (0 , 1 , 6 );
14- graph.PushDirectedEdge (0 , 3 , 7 );
15- graph.PushDirectedEdge (1 , 2 , 5 );
16- graph.PushDirectedEdge (1 , 3 , 8 );
17- graph.PushDirectedEdge (1 , 4 , -4 );
18- graph.PushDirectedEdge (2 , 1 , -2 );
19- graph.PushDirectedEdge (3 , 2 , -3 );
20- graph.PushDirectedEdge (3 , 4 , 9 );
21- graph.PushDirectedEdge (3 , 4 , 9 );
22- graph.PushDirectedEdge (4 , 2 , 7 );
23- graph.PushDirectedEdge (4 , 0 , 2 );
24-
25-
26- string expectedResult = " 0 3 2 1 4" ;
27- ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
28- ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (4 )), expectedResult);
29- }
30- }
7+ UnitTestHelper unitTestHelper;
8+
9+ // Test for Simple Graph
10+ TEST (BellmanFordTest, SimpleTest)
11+ {
12+ Graph graph;
13+
14+ graph.PushDirectedEdge (0 , 1 , 6 );
15+ graph.PushDirectedEdge (0 , 3 , 7 );
16+ graph.PushDirectedEdge (1 , 2 , 5 );
17+ graph.PushDirectedEdge (1 , 3 , 8 );
18+ graph.PushDirectedEdge (1 , 4 , -4 );
19+ graph.PushDirectedEdge (2 , 1 , -2 );
20+ graph.PushDirectedEdge (3 , 2 , -3 );
21+ graph.PushDirectedEdge (3 , 4 , 9 );
22+ graph.PushDirectedEdge (3 , 4 , 9 );
23+ graph.PushDirectedEdge (4 , 2 , 7 );
24+ graph.PushDirectedEdge (4 , 0 , 2 );
25+
26+ string expectedResult = " 0 3 2 1 4" ;
27+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
28+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (4 )), expectedResult);
29+ }
30+
31+ // Test for Single Node Graph
32+ TEST (BellmanFordTest, SingleNodeTest)
33+ {
34+ Graph graph;
35+ graph.PushDirectedEdge (0 , 0 , 0 ); // Self-loop
36+
37+ string expectedResult = " 0" ;
38+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
39+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (0 )), expectedResult);
40+ }
41+
42+ // Test for Negative Weight Cycle
43+ TEST (BellmanFordTest, NegativeWeightCycleTest)
44+ {
45+ Graph graph;
46+ graph.PushDirectedEdge (0 , 1 , 1 );
47+ graph.PushDirectedEdge (1 , 2 , -1 );
48+ graph.PushDirectedEdge (2 , 0 , -1 ); // Negative weight cycle
49+
50+ ASSERT_FALSE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
51+ }
52+
53+ // Test for Multiple Shortest Paths
54+ TEST (BellmanFordTest, MultipleShortestPathsTest)
55+ {
56+ Graph graph;
57+ graph.PushDirectedEdge (0 , 1 , 5 );
58+ graph.PushDirectedEdge (0 , 2 , 5 );
59+ graph.PushDirectedEdge (1 , 3 , 1 );
60+ graph.PushDirectedEdge (2 , 3 , 1 );
61+
62+ string expectedResult = " 0 1 3" ;
63+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
64+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (3 )), expectedResult);
65+ }
66+
67+ // Test for All Negative Weights
68+ TEST (BellmanFordTest, AllNegativeWeightsTest)
69+ {
70+ Graph graph;
71+ graph.PushDirectedEdge (0 , 1 , -5 );
72+ graph.PushDirectedEdge (1 , 2 , -3 );
73+ graph.PushDirectedEdge (2 , 3 , -2 );
74+ graph.PushDirectedEdge (3 , 4 , -1 );
75+
76+ string expectedResult = " 0 1 2 3 4" ;
77+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
78+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (4 )), expectedResult);
79+ }
80+
81+ // Test for Large Graph
82+ TEST (BellmanFordTest, LargeGraphTest)
83+ {
84+ Graph graph;
85+ for (int i = 0 ; i < 100 ; ++i) {
86+ graph.PushDirectedEdge (i, i + 1 , 1 );
87+ }
88+
89+ string expectedResult = " 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" ;
90+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
91+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (20 )), expectedResult);
92+ }
93+
94+ // Test for Self-Loop Edge
95+ TEST (BellmanFordTest, SelfLoopTest)
96+ {
97+ Graph graph;
98+ graph.PushDirectedEdge (0 , 0 , 10 ); // Self-loop with weight 10
99+
100+ string expectedResult = " 0" ;
101+ ASSERT_TRUE (graph.FindSingleSourceShortestPathBellmanFord (0 ));
102+ ASSERT_EQ (unitTestHelper.SerializeVectorToString (graph.GetShortestPathBellmanFord (0 )), expectedResult);
103+ }
104+ }
0 commit comments