session_rust/
tree_test.rs1#[cfg(test)]
2mod tests {
3 use crate::point::Point;
4 use crate::tree::{Tree, TreeNode};
5
6 #[test]
7 fn test_treenode_constructor() {
8 let node = TreeNode::new("root");
10 assert_eq!(node.name(), "root");
11 assert!(node.is_root());
12 }
13
14 #[test]
15 fn test_treenode_to_json_data() {
16 let root = TreeNode::new("project_root");
18 let folder1 = TreeNode::new("src");
19 let folder2 = TreeNode::new("docs");
20 let file1 = TreeNode::new("main.py");
21 let file2 = TreeNode::new("README.md");
22
23 root.add(&folder1);
24 root.add(&folder2);
25 folder1.add(&file1);
26 folder2.add(&file2);
27
28 let data = root.to_json_data().unwrap();
29 let json_value: serde_json::Value = serde_json::from_str(&data).unwrap();
30
31 assert_eq!(json_value["name"], "project_root");
32 assert_eq!(json_value["type"], "TreeNode");
33 assert_eq!(json_value["children"].as_array().unwrap().len(), 2);
34 assert_eq!(json_value["children"][0]["name"], "src");
35 assert_eq!(
36 json_value["children"][0]["children"]
37 .as_array()
38 .unwrap()
39 .len(),
40 1
41 );
42 }
43
44 #[test]
45 fn test_treenode_from_json_data() {
46 let original_root = TreeNode::new("filesystem_root");
48 let bin_folder = TreeNode::new("bin");
49 let lib_folder = TreeNode::new("lib");
50 let app_file = TreeNode::new("app.exe");
51 let config_file = TreeNode::new("config.dll");
52
53 original_root.add(&bin_folder);
54 original_root.add(&lib_folder);
55 bin_folder.add(&app_file);
56 lib_folder.add(&config_file);
57
58 let data = original_root.to_json_data().unwrap();
59 let restored_root = TreeNode::from_json_data(&data).unwrap();
60
61 assert_eq!(restored_root.name(), "filesystem_root");
62 assert_eq!(restored_root.children().len(), 2);
63 assert_eq!(restored_root.children()[0].name(), "bin");
64 assert_eq!(restored_root.children()[0].children().len(), 1);
65 }
66
67 #[test]
68 fn test_treenode_add() {
69 let parent = TreeNode::new("parent");
71 let child = TreeNode::new("child");
72 parent.add(&child);
73 assert_eq!(parent.children().len(), 1);
74 assert_eq!(child.parent().unwrap(), parent);
75 }
76
77 #[test]
78 fn test_treenode_remove() {
79 let parent = TreeNode::new("parent");
81 let child = TreeNode::new("child");
82
83 parent.add(&child);
84 parent.remove(&child);
85
86 assert_eq!(parent.children().len(), 0);
87 assert!(child.parent().is_none());
88 }
89
90 #[test]
91 fn test_treenode_traverse() {
92 let root = TreeNode::new("root");
94 let child = TreeNode::new("child");
95 root.add(&child);
96 let nodes = root.traverse("depthfirst", "preorder");
97 assert_eq!(nodes.len(), 2);
98 assert_eq!(nodes[0], root);
99 }
100
101 #[test]
102 fn test_tree_constructor() {
103 let tree = Tree::new("my_tree");
105 assert_eq!(tree.name, "my_tree");
106 assert!(tree.root().is_none());
107 }
108
109 #[test]
110 fn test_tree_to_json_data() {
111 let mut tree = Tree::new("object_hierarchy");
113 let point1 = Point::new(1.0, 2.0, 3.0);
114 let point2 = Point::new(4.0, 5.0, 6.0);
115 let point3 = Point::new(7.0, 8.0, 9.0);
116 let point4 = Point::new(10.0, 11.0, 12.0);
117
118 let root_node = TreeNode::new(&point1.guid.to_string());
119 let child1 = TreeNode::new(&point2.guid.to_string());
120 let child2 = TreeNode::new(&point3.guid.to_string());
121 let grandchild = TreeNode::new(&point4.guid.to_string());
122
123 tree.add(&root_node, None);
124 tree.add(&child1, Some(&root_node));
125 tree.add(&child2, Some(&root_node));
126 tree.add(&grandchild, Some(&child1));
127
128 let data = tree.to_json_data().unwrap();
129 let json_value: serde_json::Value = serde_json::from_str(&data).unwrap();
130
131 assert_eq!(json_value["name"], "object_hierarchy");
132 assert_eq!(json_value["type"], "Tree");
133 assert_eq!(json_value["root"]["name"], point1.guid.to_string());
134 assert_eq!(json_value["root"]["children"].as_array().unwrap().len(), 2);
135 }
136
137 #[test]
138 fn test_tree_from_json_data() {
139 let mut original_tree = Tree::new("spatial_hierarchy");
141 let point1 = Point::new(100.0, 200.0, 300.0);
142 let point2 = Point::new(400.0, 500.0, 600.0);
143 let point3 = Point::new(700.0, 800.0, 900.0);
144
145 let root = TreeNode::new(&point1.guid.to_string());
146 let child1 = TreeNode::new(&point2.guid.to_string());
147 let child2 = TreeNode::new(&point3.guid.to_string());
148
149 original_tree.add(&root, None);
150 original_tree.add(&child1, Some(&root));
151 original_tree.add(&child2, Some(&root));
152
153 let data = original_tree.to_json_data().unwrap();
154 let restored_tree = Tree::from_json_data(&data).unwrap();
155
156 assert_eq!(restored_tree.name, "spatial_hierarchy");
157 assert_eq!(
158 restored_tree.root().unwrap().name(),
159 point1.guid.to_string()
160 );
161 assert_eq!(restored_tree.nodes().len(), 3);
162 }
163
164 #[test]
165 fn test_tree_to_json_from_json() {
166 let mut tree = Tree::new("my_tree");
168 let point1 = Point::new(0.0, 0.0, 0.0);
169 let point2 = Point::new(1.0, 1.0, 1.0);
170 let point3 = Point::new(2.0, 2.0, 2.0);
171 let point4 = Point::new(3.0, 3.0, 3.0);
172
173 let root = TreeNode::new(&point1.guid.to_string());
174 let branch1 = TreeNode::new(&point2.guid.to_string());
175 let branch2 = TreeNode::new(&point3.guid.to_string());
176 let leaf = TreeNode::new(&point4.guid.to_string());
177
178 tree.add(&root, None);
179 tree.add(&branch1, Some(&root));
180 tree.add(&branch2, Some(&root));
181 tree.add(&leaf, Some(&branch1));
182
183 let filename = "test_tree.json";
184
185 tree.to_json(filename).unwrap();
186 let loaded_tree = Tree::from_json(filename).unwrap();
187
188 assert_eq!(loaded_tree.name, tree.name);
189 assert_eq!(
190 loaded_tree.root().unwrap().name(),
191 tree.root().unwrap().name()
192 );
193 assert_eq!(loaded_tree.nodes().len(), tree.nodes().len());
194 }
195
196 #[test]
197 fn test_tree_add() {
198 let mut tree = Tree::new("my_tree");
200 let root = TreeNode::new("root");
201 tree.add(&root, None);
202 assert_eq!(tree.root().unwrap(), root);
203 assert_eq!(tree.nodes().len(), 1);
204 }
205
206 #[test]
207 fn test_tree_remove() {
208 let mut tree = Tree::new("my_tree");
210 let root = TreeNode::new("root");
211
212 tree.add(&root, None);
213 tree.remove(&root);
214
215 assert!(tree.root().is_none());
216 }
217
218 #[test]
219 fn test_tree_get_node_by_name() {
220 let mut tree = Tree::new("my_tree");
222 let root = TreeNode::new("root");
223 tree.add(&root, None);
224 let found = tree.get_node_by_name("root");
225 assert_eq!(found.unwrap(), root);
226 }
227}