4
4
5
5
namespace SingleSourceShortestPathBellmanFord
6
6
{
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