#![cfg(test)]
mod unit_tests {
use crate::error::Error;
use crate::network::*;
use alloc::collections::{BTreeMap, BTreeSet};
#[test]
fn test_network() {
let network: BTreeNetwork<usize> = BTreeNetwork::new();
assert_eq!(network, BTreeNetwork::new())
}
#[test]
fn definition() {
let network: BTreeNetwork<usize> = BTreeNetwork::new();
let vertices: BTreeMap<usize, BTreeSet<usize>> = BTreeMap::new();
assert_eq!(network, BTreeNetwork { vertices })
}
#[test]
fn new_and_default() {
let network: BTreeNetwork<usize> = BTreeNetwork::new();
assert_eq!(network, BTreeNetwork::default())
}
#[test]
fn vertices() {
let network: BTreeNetwork<usize> = BTreeNetwork::new();
let vertices: BTreeSet<&usize> = BTreeSet::new();
assert_eq!(network.vertices(), vertices)
}
#[test]
fn add_vertex() {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
let mut exp_vertices: BTreeSet<&usize> = BTreeSet::new();
exp_vertices.insert(&0);
exp_vertices.insert(&1);
exp_vertices.insert(&2);
assert_eq!(network.vertices(), exp_vertices)
}
#[test]
fn add_edge() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
let mut exp_edges_0: BTreeSet<usize> = BTreeSet::new();
exp_edges_0.insert(1);
assert_eq!(network.get_vertex_value(0).unwrap(), &exp_edges_0);
let mut exp_edges_1: BTreeSet<usize> = BTreeSet::new();
exp_edges_1.insert(0);
exp_edges_1.insert(2);
assert_eq!(network.get_vertex_value(1).unwrap(), &exp_edges_1);
assert_eq!(
network.add_edge(0, 3).unwrap_err(),
Error::VertexDoesNotExist
);
assert_eq!(
network.add_edge(3, 0).unwrap_err(),
Error::VertexDoesNotExist
);
assert_eq!(
network.add_edge(1, 3).unwrap_err(),
Error::VertexDoesNotExist
);
assert_eq!(
network.add_edge(3, 1).unwrap_err(),
Error::VertexDoesNotExist
);
Ok(())
}
#[test]
fn remove_vertex() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
network.remove_vertex(0)?;
let mut exp_vertices: BTreeSet<&usize> = BTreeSet::new();
exp_vertices.insert(&1);
exp_vertices.insert(&2);
assert_eq!(network.vertices(), exp_vertices);
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
network.remove_vertex(1)?;
let mut exp_vertices: BTreeSet<&usize> = BTreeSet::new();
exp_vertices.insert(&0);
exp_vertices.insert(&2);
assert_eq!(network.vertices(), exp_vertices);
let exp_edges_0: BTreeSet<usize> = BTreeSet::new();
assert_eq!(network.get_vertex_value(0).unwrap(), &exp_edges_0);
Ok(())
}
#[test]
fn remove_edge() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
let mut exp_edges: BTreeSet<usize> = BTreeSet::new();
exp_edges.insert(1);
assert_eq!(network.get_vertex_value(0).unwrap(), &exp_edges);
assert_eq!(network.get_vertex_value(2).unwrap(), &exp_edges);
let mut exp_edges: BTreeSet<usize> = BTreeSet::new();
exp_edges.insert(0);
exp_edges.insert(2);
assert_eq!(network.get_vertex_value(1).unwrap(), &exp_edges);
network.remove_edge(0, 1)?;
assert_eq!(network.vertices().len(), 3);
let exp_edges: BTreeSet<usize> = BTreeSet::new();
assert_eq!(network.get_vertex_value(0).unwrap(), &exp_edges);
let mut exp_edges: BTreeSet<usize> = BTreeSet::new();
exp_edges.insert(2);
assert_eq!(network.get_vertex_value(1).unwrap(), &exp_edges);
let mut exp_edges: BTreeSet<usize> = BTreeSet::new();
exp_edges.insert(1);
assert_eq!(network.get_vertex_value(2).unwrap(), &exp_edges);
Ok(())
}
#[test]
fn get_vertex_value() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
let mut exp_edges_0: BTreeSet<usize> = BTreeSet::new();
exp_edges_0.insert(1);
assert_eq!(network.get_vertex_value(0).unwrap(), &exp_edges_0);
let mut exp_edges_1: BTreeSet<usize> = BTreeSet::new();
exp_edges_1.insert(0);
exp_edges_1.insert(2);
assert_eq!(network.get_vertex_value(1).unwrap(), &exp_edges_1);
let mut exp_edges_2: BTreeSet<usize> = BTreeSet::new();
exp_edges_2.insert(1);
assert_eq!(network.get_vertex_value(2).unwrap(), &exp_edges_2);
Ok(())
}
#[test]
fn adjacent() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
assert!(network.adjacent(0, 1)?);
assert!(network.adjacent(1, 0)?);
assert!(network.adjacent(1, 2)?);
assert!(network.adjacent(2, 1)?);
assert_eq!(
network.adjacent(0, 3).unwrap_err(),
Error::VertexDoesNotExist
);
assert_eq!(
network.adjacent(3, 0).unwrap_err(),
Error::VertexDoesNotExist
);
Ok(())
}
#[test]
fn connections() -> Result<(), Error> {
let mut network: BTreeNetwork<usize> = BTreeNetwork::new();
network.add_vertex(0);
network.add_vertex(1);
network.add_vertex(2);
assert_eq!(network.vertices().len(), 3);
network.add_edge(0, 1)?;
network.add_edge(1, 2)?;
network.add_edge(0, 2)?;
let mut exp_connections_0: BTreeSet<usize> = BTreeSet::new();
exp_connections_0.insert(1);
exp_connections_0.insert(2);
assert_eq!(network.connections(0).unwrap(), &exp_connections_0);
let mut exp_connections_1: BTreeSet<usize> = BTreeSet::new();
exp_connections_1.insert(0);
exp_connections_1.insert(2);
assert_eq!(network.connections(1).unwrap(), &exp_connections_1);
let mut exp_connections_1: BTreeSet<usize> = BTreeSet::new();
exp_connections_1.insert(0);
exp_connections_1.insert(2);
assert_eq!(network.connections(1).unwrap(), &exp_connections_1);
assert!(network.connections(3).is_none());
Ok(())
}
}