1
+ using System . Linq ;
2
+ using Dijkstra . NET . Extensions ;
3
+ using Dijkstra . NET . Model ;
4
+ using Xunit ;
5
+
6
+ namespace Dijkstra . NET . Tests . Extensions
7
+ {
8
+ public class ShortestPathExtensionsTests
9
+ {
10
+ [ Fact ]
11
+ public void DijkstraGraphShould_Find_Path_In_Multi_Paths_Graph ( )
12
+ {
13
+ var graph = new Graph < int , string > ( ) ;
14
+
15
+ graph . AddNode ( 0 ) ;
16
+ graph . AddNode ( 0 ) ;
17
+ graph . AddNode ( 0 ) ;
18
+ graph . AddNode ( 0 ) ;
19
+ graph . AddNode ( 0 ) ;
20
+ graph . AddNode ( 0 ) ;
21
+
22
+ graph . Connect ( 0 , 1 , 2 , null ) ;
23
+ graph . Connect ( 0 , 2 , 3 , null ) ;
24
+ graph . Connect ( 1 , 3 , 4 , null ) ;
25
+ graph . Connect ( 2 , 3 , 2 , null ) ;
26
+ graph . Connect ( 2 , 4 , 1 , null ) ;
27
+ graph . Connect ( 3 , 5 , 6 , null ) ;
28
+
29
+ var result = graph . Dijkstra ( 0 , 5 ) ;
30
+ uint [ ] path = result . GetPath ( ) . ToArray ( ) ;
31
+
32
+ Assert . Equal < uint > ( 0 , path [ 0 ] ) ;
33
+ Assert . Equal < uint > ( 2 , path [ 1 ] ) ;
34
+ Assert . Equal < uint > ( 3 , path [ 2 ] ) ;
35
+ Assert . Equal < uint > ( 5 , path [ 3 ] ) ;
36
+
37
+ Assert . Equal ( 11 , result . Distance ) ;
38
+ Assert . True ( result . IsFounded ) ;
39
+ }
40
+
41
+ [ Fact ]
42
+ public void DijkstraGraphShould_Find_Path_In_Override_Node ( )
43
+ {
44
+ var graph = new Graph < int , string > ( ) ;
45
+
46
+ graph . AddNode ( 0 ) ;
47
+ graph . AddNode ( 0 ) ;
48
+ graph . AddNode ( 0 ) ;
49
+ graph . AddNode ( 0 ) ;
50
+ graph . AddNode ( 0 ) ;
51
+ graph . AddNode ( 0 ) ;
52
+
53
+ graph . Connect ( 0 , 1 , 2 , null ) ;
54
+ graph . Connect ( 0 , 2 , 6 , null ) ;
55
+ graph . Connect ( 1 , 2 , 2 , null ) ;
56
+ graph . Connect ( 2 , 3 , 1 , null ) ;
57
+ graph . Connect ( 3 , 4 , 1 , null ) ;
58
+ graph . Connect ( 0 , 5 , 5 , null ) ;
59
+
60
+ var result = graph . Dijkstra ( 0 , 4 ) ;
61
+ uint [ ] path = result . GetPath ( ) . ToArray ( ) ;
62
+
63
+ Assert . Equal < uint > ( 0 , path [ 0 ] ) ;
64
+ Assert . Equal < uint > ( 1 , path [ 1 ] ) ;
65
+ Assert . Equal < uint > ( 2 , path [ 2 ] ) ;
66
+ Assert . Equal < uint > ( 3 , path [ 3 ] ) ;
67
+ Assert . Equal < uint > ( 4 , path [ 4 ] ) ;
68
+
69
+ Assert . Equal ( 6 , result . Distance ) ;
70
+ Assert . True ( result . IsFounded ) ;
71
+ }
72
+
73
+ [ Fact ]
74
+ public void DijkstraGraphShould_Find_Path_With_One_Vertex_In_Graph ( )
75
+ {
76
+ var graph = new Graph < int , string > ( ) ;
77
+ graph . AddNode ( 0 ) ;
78
+
79
+ var result = graph . Dijkstra ( 0 , 0 ) ;
80
+ uint [ ] path = result . GetPath ( ) . ToArray ( ) ;
81
+
82
+ Assert . Equal < uint > ( 0 , path [ 0 ] ) ;
83
+ Assert . Equal ( 0 , result . Distance ) ;
84
+ Assert . True ( result . IsFounded ) ;
85
+ }
86
+
87
+ [ Fact ]
88
+ public void DijkstraGraphShould_Find_Path_With_One_Vertex_And_One_Edge_In_Graph ( )
89
+ {
90
+ var graph = new Graph < int , string > ( ) ;
91
+ graph . AddNode ( 0 ) ;
92
+
93
+ graph . Connect ( 0 , 0 , 5 , null ) ;
94
+
95
+ var result = graph . Dijkstra ( 0 , 0 ) ;
96
+ uint [ ] path = result . GetPath ( ) . ToArray ( ) ;
97
+
98
+ Assert . Equal < uint > ( 0 , path [ 0 ] ) ;
99
+ Assert . Equal ( 0 , result . Distance ) ;
100
+ Assert . True ( result . IsFounded ) ;
101
+ }
102
+
103
+ [ Fact ]
104
+ public void DijkstraGraphShould_Find_Path_In_Multi_Edges_Graph ( )
105
+ {
106
+ var graph = new Graph < int , string > ( ) ;
107
+
108
+ graph . AddNode ( 0 ) ;
109
+ graph . AddNode ( 0 ) ;
110
+ graph . AddNode ( 0 ) ;
111
+ graph . AddNode ( 0 ) ;
112
+ graph . AddNode ( 0 ) ;
113
+ graph . AddNode ( 0 ) ;
114
+
115
+ graph . Connect ( 0 , 1 , 2 , null ) ;
116
+ graph . Connect ( 0 , 2 , 3 , null ) ;
117
+ graph . Connect ( 1 , 3 , 4 , null ) ;
118
+ graph . Connect ( 2 , 3 , 3 , null ) ;
119
+ graph . Connect ( 2 , 3 , 2 , null ) ;
120
+ graph . Connect ( 2 , 3 , 4 , null ) ;
121
+ graph . Connect ( 2 , 4 , 1 , null ) ;
122
+ graph . Connect ( 3 , 5 , 6 , null ) ;
123
+
124
+ var result = graph . Dijkstra ( 0 , 5 ) ;
125
+ uint [ ] path = result . GetPath ( ) . ToArray ( ) ;
126
+
127
+ Assert . Equal < uint > ( 0 , path [ 0 ] ) ;
128
+ Assert . Equal < uint > ( 2 , path [ 1 ] ) ;
129
+ Assert . Equal < uint > ( 3 , path [ 2 ] ) ;
130
+ Assert . Equal < uint > ( 5 , path [ 3 ] ) ;
131
+
132
+ Assert . Equal ( 11 , result . Distance ) ;
133
+ Assert . True ( result . IsFounded ) ;
134
+ }
135
+
136
+ [ Fact ]
137
+ public void DijkstraGraphNot_Should_Find_Path_In_Graph ( )
138
+ {
139
+ var graph = new Graph < int , string > ( ) ;
140
+
141
+ graph . AddNode ( 0 ) ;
142
+ graph . AddNode ( 0 ) ;
143
+ graph . AddNode ( 0 ) ;
144
+ graph . AddNode ( 0 ) ;
145
+ graph . AddNode ( 0 ) ;
146
+ graph . AddNode ( 0 ) ;
147
+
148
+ graph . Connect ( 0 , 1 , 2 , null ) ;
149
+ graph . Connect ( 0 , 2 , 3 , null ) ;
150
+ graph . Connect ( 1 , 3 , 4 , null ) ;
151
+ graph . Connect ( 2 , 3 , 2 , null ) ;
152
+ graph . Connect ( 2 , 4 , 1 , null ) ;
153
+
154
+ var result = graph . Dijkstra ( 0 , 5 ) ;
155
+
156
+ Assert . False ( result . IsFounded ) ;
157
+ }
158
+ }
159
+ }
0 commit comments