use wolf_graph::prelude::*;
use serde::{Deserialize, Serialize};
pub fn make_test_graph(edges: &[(EdgeID, NodeID, NodeID)]) -> BlankGraph {
let mut graph = Graph::new();
for edge in edges {
let (edge, source, target) = edge;
if !graph.has_node(source) {
graph.add_node(source).unwrap();
}
if !graph.has_node(target) {
graph.add_node(target).unwrap();
}
graph.add_edge(edge, source, target).unwrap();
}
graph
}
pub fn make_graph() -> BlankGraph {
make_test_graph(&graph_edges())
}
pub fn make_dag() -> BlankGraph {
make_test_graph(&dag_edges())
}
pub fn make_tree() -> BlankGraph {
make_test_graph(&tree_edges())
}
pub fn make_test_string_graph(edges: &[(EdgeID, NodeID, NodeID)]) -> Graph<String, String, String> {
let mut graph = Graph::new_with_data("G".to_string());
for edge in edges {
let (edge, source, target) = edge;
if !graph.has_node(source) {
graph.add_node_with_data(source, source.to_string()).unwrap();
}
if !graph.has_node(target) {
graph.add_node_with_data(target, target.to_string()).unwrap();
}
graph.add_edge_with_data(edge, source, target, edge.to_string()).unwrap();
}
graph
}
pub fn make_string_graph() -> Graph<String, String, String> {
make_test_string_graph(&graph_edges())
}
pub fn make_string_dag() -> Graph<String, String, String> {
make_test_string_graph(&dag_edges())
}
pub fn make_string_tree() -> Graph<String, String, String> {
make_test_string_graph(&tree_edges())
}
pub fn graph_edges() -> Vec<(EdgeID, NodeID, NodeID)> {
let v = vec![
("AC", "A", "C"),
("AD", "A", "D"),
("AE", "A", "E"),
("BA", "B", "A"),
("BC", "B", "C"),
("BG", "B", "G"),
("CD", "C", "D"),
("ED", "E", "D"),
("FD", "F", "D"),
("FE", "F", "E"),
("HJ", "H", "J"),
("IC", "I", "C"),
("IK", "I", "K"),
("JA", "J", "A"),
("JE", "J", "E"),
("JF", "J", "F"),
("GI", "G", "I"), ("IB", "I", "B"), ];
v.into_iter().map(|(a, b, c)| (eid!(a), nid!(b), nid!(c))).collect()
}
pub fn dag_edges() -> Vec<(EdgeID, NodeID, NodeID)> {
let v = vec![
("AC", "A", "C"),
("AD", "A", "D"),
("AE", "A", "E"),
("BA", "B", "A"),
("BC", "B", "C"),
("BG", "B", "G"),
("CD", "C", "D"),
("ED", "E", "D"),
("FD", "F", "D"),
("FE", "F", "E"),
("HJ", "H", "J"),
("IC", "I", "C"),
("IK", "I", "K"),
("JA", "J", "A"),
("JE", "J", "E"),
("JF", "J", "F"),
("IG", "I", "G"),
("BI", "B", "I"),
];
v.into_iter().map(|(a, b, c)| (eid!(a), nid!(b), nid!(c))).collect()
}
pub fn tree_edges() -> Vec<(EdgeID, NodeID, NodeID)> {
let v = vec![
("AB", "A", "B"),
("AC", "A", "C"),
("AD", "A", "D"),
("DE", "D", "E"),
("DF", "D", "F"),
("DG", "D", "G"),
("CH", "C", "H"),
("BI", "B", "I"),
("HJ", "H", "J"),
("HK", "H", "K"),
("FL", "F", "L"),
("EM", "E", "M"),
("EN", "E", "N"),
("EO", "E", "O"),
];
v.into_iter().map(|(a, b, c)| (eid!(a), nid!(b), nid!(c))).collect()
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct TestElemData(pub i32, pub String);