rusted_mem/
nodes.rs

1
2pub struct Nodes<T> {
3     data: Vec<Node<T>>
4}
5
6impl<T> Nodes<T> {
7    pub fn new() -> Nodes<T> {
8        Nodes {
9            data: Vec::new()
10        }
11    }
12
13    pub fn add_node(&mut self, member: Node<T>) {
14        self.data.push(member)
15    }
16
17    pub fn is_empty(&mut self) -> bool {
18        self.data.len() == 0
19    }
20
21    pub fn pop_node(&mut self) -> Option<Node<T>>{
22        self.data.pop()
23    }
24}
25
26pub struct Node<T> {
27    key: String,
28    value: Option<T>
29}
30
31impl<T> Node<T> {
32    pub fn new(t_key: &str, t_value: Option<T>) -> Node<T>{
33        Node {
34            key: String::from(t_key),
35            value: Option::from(t_value)
36        }
37    }
38}
39
40
41
42
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47    
48    #[test]    
49    fn add_node_to_nodes() {
50        let mut n: Nodes<&str> = Nodes::new();
51        let d = Node::new("Key1", Option::from("Hello"));
52        n.add_node(d);
53        let dd = n.pop_node();
54        assert!(dd.is_some());
55        match dd {
56            Some(node) => match node.value {
57                Some(value) => {
58                    assert_eq!(node.key, "Key1");
59                    assert_eq!(value, "Hello")
60                },
61                None => {}
62            },
63            None => {}
64        }
65    }
66
67    #[test]
68    fn pop_empty_nodes(){
69        let mut n: Nodes<&str> = Nodes::new();
70        let dd = n.pop_node();
71        assert!(dd.is_none())
72    }
73    #[test]
74    fn nodes_is_empty(){
75        let mut n: Nodes<&str> = Nodes::new();
76        assert!(n.is_empty())
77    }
78}