session_rust/
graph_test.rs

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"))); // Check reverse direction
35    }
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", ""); // Add existing edge
62        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        // The order is not guaranteed, so we check for both possibilities
81        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); // B and C should still exist
106        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        // Also check the reverse direction
153        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}