Add tests for Dijkstra's algorithm on trivial graphs

This commit is contained in:
2025-10-25 01:15:16 +02:00
parent 64d0302d64
commit 5ad480b379
+56 -4
View File
@@ -2,6 +2,58 @@ use grapherity::algorithms;
use grapherity::models::Graph; use grapherity::models::Graph;
use grapherity::models::Vertex; use grapherity::models::Vertex;
#[test]
fn dijkstra_single_vertex() {
let mut graph = Graph::new();
let v1 = graph.add_vertex();
let (distances, predecessors) = algorithms::dijkstra(&graph, v1);
assert_eq!(
distances.len(),
1,
"distances count must equal vertex count"
);
assert_eq!(
predecessors.len(),
1,
"predecessors count must equal vertex count"
);
assert_eq!(
distances[0],
Some(0),
"unexpected distance of source vertex"
);
assert_eq!(
predecessors[0], None,
"unexpected predecessor of source vertex",
);
}
#[test]
fn dijkstra_disconnected() {
let mut graph = Graph::new();
let v1 = graph.add_vertex();
graph.add_vertex();
let (distances, predecessors) = algorithms::dijkstra(&graph, v1);
assert_eq!(
distances.len(),
2,
"distances count must equal vertex count"
);
assert_eq!(
predecessors.len(),
2,
"predecessors count must equal vertex count"
);
assert_eq!(
distances[1], None,
"unexpected distance of disconnected vertex"
);
assert_eq!(
predecessors[0], None,
"unexpected predecessor of disconnected vertex",
);
}
#[test] #[test]
fn dijkstra() { fn dijkstra() {
let (graph, vertices) = make_test_graph(); let (graph, vertices) = make_test_graph();
@@ -33,22 +85,22 @@ fn dijkstra() {
assert_eq!( assert_eq!(
distances.len(), distances.len(),
graph.vertex_count(), graph.vertex_count(),
"distances count from Dijkstra's algorithm must equal vertex count" "distances count must equal vertex count"
); );
assert_eq!( assert_eq!(
predecessors.len(), predecessors.len(),
graph.vertex_count(), graph.vertex_count(),
"predecessors count from Dijkstra's algorithm must equal vertex count" "predecessors count must equal vertex count"
); );
for i in 0..graph.vertex_count() { for i in 0..graph.vertex_count() {
assert_eq!( assert_eq!(
distances[i], expected_distances_from_v0[i], distances[i], expected_distances_from_v0[i],
"unexpected distance from {:?} to {:?} from Dijkstra's algorithm", "unexpected distance from {:?} to {:?}",
vertices[0], vertices[i] vertices[0], vertices[i]
); );
assert!( assert!(
expected_predecessors_from_v0[i].contains(&predecessors[i]), expected_predecessors_from_v0[i].contains(&predecessors[i]),
"unexpected predecessor {:?} of {:?} from Dijkstra's algorithm", "unexpected predecessor {:?} of {:?}",
predecessors[i], predecessors[i],
vertices[i] vertices[i]
); );