torin/
test_utils.rs

1#![allow(clippy::missing_panics_doc)]
2
3use std::collections::HashMap;
4
5use crate::prelude::*;
6
7#[derive(Default)]
8pub struct TestingTree {
9    mapper: HashMap<usize, (Option<usize>, Vec<usize>, u16, Node)>,
10}
11
12impl TestingTree {
13    pub fn add(&mut self, node_id: usize, parent: Option<usize>, children: Vec<usize>, node: Node) {
14        let depth = parent.map_or(0, |p| self.mapper.get(&p).unwrap().2) + 1;
15        self.mapper.insert(node_id, (parent, children, depth, node));
16    }
17
18    pub fn set_node(&mut self, node_id: usize, node: Node) {
19        self.mapper.get_mut(&node_id).unwrap().3 = node;
20    }
21
22    pub fn remove(&mut self, node_id: usize) {
23        let node = self.mapper.remove(&node_id).unwrap();
24
25        if let Some((_, parent_children, _, _)) = node.0.and_then(|p| self.mapper.get_mut(&p)) {
26            parent_children.retain(|c| *c != node_id);
27        }
28
29        for child in node.1 {
30            self.remove(child);
31        }
32    }
33}
34
35impl TreeAdapter<usize> for TestingTree {
36    fn children_of(&mut self, node_id: &usize) -> Vec<usize> {
37        self.mapper
38            .get(node_id)
39            .map(|c| c.1.clone())
40            .unwrap_or_default()
41    }
42
43    fn parent_of(&self, node_id: &usize) -> Option<usize> {
44        self.mapper.get(node_id).and_then(|c| c.0)
45    }
46
47    fn height(&self, node_id: &usize) -> Option<u16> {
48        self.mapper.get(node_id).map(|c| c.2)
49    }
50
51    fn get_node(&self, node_id: &usize) -> Option<Node> {
52        self.mapper.get(node_id).map(|c| c.3.clone())
53    }
54
55    fn root_id(&self) -> usize {
56        0
57    }
58}
59
60pub fn test_utils() -> (Torin<usize>, Option<NoopMeasurer>) {
61    let layout = Torin::<usize>::new();
62    let measurer = None::<NoopMeasurer>;
63
64    (layout, measurer)
65}