1#[cfg(test)]
2mod tests {
3 use crate::graph::Graph;
4
5 #[test]
6 fn test_graph_constructor() {
7 let graph = Graph::new("my_graph");
8 assert_eq!(graph.name, "my_graph");
9 assert!(!graph.guid.is_empty());
10 }
11
12 #[test]
13 fn test_graph_add_node() {
14 let mut graph = Graph::new("my_graph");
15 let result = graph.add_node("node1", "attribute_data");
16 assert_eq!(result, "node1");
17 assert!(graph.has_node("node1"));
18 }
19
20 #[test]
21 fn test_graph_has_node() {
22 let mut graph = Graph::new("my_graph");
23 graph.add_node("node1", "");
24 assert!(graph.has_node("node1"));
25 assert!(!graph.has_node("node2"));
26 }
27
28 #[test]
29 fn test_graph_add_edge() {
30 let mut graph = Graph::new("my_graph");
31 let result = graph.add_edge("node1", "node2", "edge_data");
32 assert_eq!(result, ("node1".to_string(), "node2".to_string()));
33 assert!(graph.has_edge(("node1", "node2")));
34 assert!(graph.has_edge(("node2", "node1"))); }
36
37 #[test]
38 fn test_graph_has_edge() {
39 let mut graph = Graph::new("my_graph");
40 graph.add_edge("A", "B", "edge_attr");
41 assert!(graph.has_edge(("A", "B")));
42 assert!(!graph.has_edge(("C", "D")));
43 }
44
45 #[test]
46 fn test_graph_number_of_vertices() {
47 let mut graph = Graph::new("my_graph");
48 graph.add_node("node1", "");
49 assert_eq!(graph.number_of_vertices(), 1);
50 graph.add_node("node2", "");
51 assert_eq!(graph.number_of_vertices(), 2);
52 }
53
54 #[test]
55 fn test_graph_number_of_edges() {
56 let mut graph = Graph::new("my_graph");
57 graph.add_edge("node1", "node2", "");
58 assert_eq!(graph.number_of_edges(), 1);
59 graph.add_edge("node2", "node3", "");
60 assert_eq!(graph.number_of_edges(), 2);
61 graph.add_edge("node1", "node2", ""); assert_eq!(graph.number_of_edges(), 2);
63 }
64
65 #[test]
66 fn test_graph_get_vertices() {
67 let mut graph = Graph::new("my_graph");
68 graph.add_node("node1", "node_data");
69 let verts = graph.get_vertices();
70 assert_eq!(verts.len(), 1);
71 assert_eq!(verts[0].name, "node1");
72 }
73
74 #[test]
75 fn test_graph_get_edges() {
76 let mut graph = Graph::new("my_graph");
77 graph.add_edge("node1", "node2", "edge_data");
78 let edges = graph.get_edges();
79 assert_eq!(edges.len(), 1);
80 let edge = ("node1".to_string(), "node2".to_string());
82 let reversed_edge = ("node2".to_string(), "node1".to_string());
83 assert!(edges.contains(&edge) || edges.contains(&reversed_edge));
84 }
85
86 #[test]
87 fn test_graph_neighbors() {
88 let mut graph = Graph::new("my_graph");
89 graph.add_edge("A", "B", "");
90 graph.add_edge("A", "C", "");
91 let mut neighbors = graph.neighbors("A");
92 neighbors.sort();
93 assert_eq!(neighbors, vec!["B".to_string(), "C".to_string()]);
94 }
95
96 #[test]
97 fn test_graph_remove_node() {
98 let mut graph = Graph::new("my_graph");
99 graph.add_edge("A", "B", "");
100 graph.add_edge("A", "C", "");
101 graph.remove_node("A");
102 assert!(!graph.has_node("A"));
103 assert!(!graph.has_edge(("A", "B")));
104 assert!(!graph.has_edge(("A", "C")));
105 assert_eq!(graph.number_of_vertices(), 2); assert_eq!(graph.number_of_edges(), 0);
107 }
108
109 #[test]
110 fn test_graph_remove_edge() {
111 let mut graph = Graph::new("my_graph");
112 graph.add_edge("A", "B", "edge_attr");
113 graph.remove_edge(("A", "B"));
114 assert!(!graph.has_edge(("A", "B")));
115 assert!(!graph.has_edge(("B", "A")));
116 assert_eq!(graph.number_of_edges(), 0);
117 }
118
119 #[test]
120 fn test_graph_clear() {
121 let mut graph = Graph::new("my_graph");
122 graph.add_edge("A", "B", "");
123 graph.clear();
124 assert_eq!(graph.number_of_vertices(), 0);
125 assert_eq!(graph.number_of_edges(), 0);
126 assert!(graph.get_vertices().is_empty());
127 assert!(graph.get_edges().is_empty());
128 }
129
130 #[test]
131 fn test_graph_node_attribute() {
132 let mut graph = Graph::new("my_graph");
133 graph.add_node("node1", "initial_data");
134 assert_eq!(graph.node_attribute("node1", None).unwrap(), "initial_data");
135 graph.node_attribute("node1", Some("new_data"));
136 assert_eq!(graph.node_attribute("node1", None).unwrap(), "new_data");
137 }
138
139 #[test]
140 fn test_graph_edge_attribute() {
141 let mut graph = Graph::new("my_graph");
142 graph.add_edge("node1", "node2", "edge_data");
143 assert_eq!(
144 graph.edge_attribute("node1", "node2", None).unwrap(),
145 "edge_data"
146 );
147 graph.edge_attribute("node1", "node2", Some("new_data"));
148 assert_eq!(
149 graph.edge_attribute("node1", "node2", None).unwrap(),
150 "new_data"
151 );
152 assert_eq!(
154 graph.edge_attribute("node2", "node1", None).unwrap(),
155 "new_data"
156 );
157 }
158
159 #[test]
160 fn test_graph_to_json_from_json() {
161 let mut graph = Graph::new("my_graph");
162 graph.add_node("A", "vertex_A");
163 graph.add_node("B", "vertex_B");
164 graph.add_node("C", "vertex_C");
165 graph.add_node("D", "vertex_D");
166 graph.add_edge("A", "B", "edge_AB");
167 graph.add_edge("B", "C", "edge_BC");
168 graph.add_edge("C", "D", "edge_CD");
169 let filename = "test_graph.json";
170
171 graph.to_json(filename).unwrap();
172 let loaded_graph = Graph::from_json(filename).unwrap();
173
174 assert_eq!(graph.name, loaded_graph.name);
175 assert_eq!(
176 graph.number_of_vertices(),
177 loaded_graph.number_of_vertices()
178 );
179 assert_eq!(graph.number_of_edges(), loaded_graph.number_of_edges());
180 }
181}