use safegraph::graph::capability::{InsertEdge, InsertNode};
use safegraph::graph::prelude::*;
use safegraph::VecGraph;
#[test]
fn remove_node_swap_remove_invalidates_precollected_edge_indices() {
let mut g = VecGraph::<u32, u32>::default();
let n0 = unsafe { InsertNode::insert_node_unchecked(&mut g, 0).unwrap() };
let n1 = unsafe { InsertNode::insert_node_unchecked(&mut g, 1).unwrap() };
let n2 = unsafe { InsertNode::insert_node_unchecked(&mut g, 2).unwrap() };
let e0 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 100, [n1, n2]).unwrap() };
let _e1 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 101, [n0, n1]).unwrap() };
let _e2 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 102, [n0, n2]).unwrap() };
g.remove_edge(e0);
let _e3 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 103, [n0, n2]).unwrap() };
g.remove_node(n0);
}
#[test]
fn remove_node_swap_remove_invalidates_precollected_incoming_edges() {
let mut g = VecGraph::<u32, u32>::default();
let n0 = unsafe { InsertNode::insert_node_unchecked(&mut g, 0).unwrap() };
let n1 = unsafe { InsertNode::insert_node_unchecked(&mut g, 1).unwrap() };
let n2 = unsafe { InsertNode::insert_node_unchecked(&mut g, 2).unwrap() };
let e0 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 100, [n1, n2]).unwrap() };
let _e1 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 101, [n1, n0]).unwrap() };
let _e2 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 102, [n2, n0]).unwrap() };
g.remove_edge(e0);
let _e3 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 103, [n2, n0]).unwrap() };
g.remove_node(n0);
}
#[test]
fn remove_node_swap_remove_with_extra_edges() {
let mut g = VecGraph::<u32, u32>::default();
let n0 = unsafe { InsertNode::insert_node_unchecked(&mut g, 0).unwrap() };
let n1 = unsafe { InsertNode::insert_node_unchecked(&mut g, 1).unwrap() };
let n2 = unsafe { InsertNode::insert_node_unchecked(&mut g, 2).unwrap() };
let n3 = unsafe { InsertNode::insert_node_unchecked(&mut g, 3).unwrap() };
let e0 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 200, [n1, n2]).unwrap() };
let _e1 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 201, [n0, n1]).unwrap() };
let _e2 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 202, [n0, n2]).unwrap() };
let _e3 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 203, [n0, n3]).unwrap() };
g.remove_edge(e0);
let _e4 = unsafe { InsertEdge::insert_edge_unchecked(&mut g, 204, [n0, n3]).unwrap() };
g.remove_node(n0);
}