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