quartz_cli/
tree.rs

1pub struct Tree<T> {
2    pub root: Node<T>,
3}
4
5#[derive(Debug)]
6pub struct Node<T> {
7    pub value: T,
8    pub children: Vec<Node<T>>,
9}
10
11impl<T> Tree<T> {
12    pub fn new(value: T) -> Self {
13        Tree {
14            root: Node {
15                value,
16                children: Vec::new(),
17            },
18        }
19    }
20}
21
22impl<T> Node<T> {
23    pub fn new(value: T) -> Self {
24        Node {
25            value,
26            children: Vec::new(),
27        }
28    }
29
30    pub fn add_child(&mut self, value: T) {
31        let node = Node::new(value);
32        self.children.push(node);
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test_tree() {
42        let mut tree = Tree::new(1);
43        tree.root.add_child(2);
44        tree.root.add_child(3);
45        tree.root.children[0].add_child(4);
46        tree.root.children[0].add_child(5);
47        tree.root.children[1].add_child(6);
48        tree.root.children[1].add_child(7);
49
50        assert_eq!(tree.root.value, 1);
51        assert_eq!(tree.root.children.len(), 2);
52        assert_eq!(tree.root.children[0].value, 2);
53        assert_eq!(tree.root.children[0].children.len(), 2);
54        assert_eq!(tree.root.children[0].children[0].value, 4);
55        assert_eq!(tree.root.children[0].children[1].value, 5);
56        assert_eq!(tree.root.children[1].value, 3);
57        assert_eq!(tree.root.children[1].children.len(), 2);
58        assert_eq!(tree.root.children[1].children[0].value, 6);
59        assert_eq!(tree.root.children[1].children[1].value, 7);
60    }
61}