dense_heap/
tests.rs

1#[cfg(test)]
2mod tests {
3    use crate::dheap::*;
4
5    #[test]
6    fn create_dheap() {
7        let heap: DHeap<i32> = DHeap::with_capacity(16);
8        assert_eq!(heap.size(), 1);
9    }
10
11    #[test]
12    fn allocate_and_deallocate() {
13        let heap: DHeap<i32> = DHeap::with_capacity(16);
14        let val = 42;
15
16        let dbox = heap.safe_new(val).unwrap();
17        assert_eq!(heap.size(), 2);
18        assert_eq!(*dbox, val);
19
20        let inner_val = dbox.into_inner();
21        assert_eq!(inner_val, val);
22        assert_eq!(heap.size(), 2);
23    }
24
25    #[test]
26    fn multiple_allocations() {
27        let heap: DHeap<i32> = DHeap::with_capacity(16);
28        let vals = vec![1, 2, 3, 4, 5];
29
30        let mut dboxes = Vec::new();
31        for val in &vals {
32            dboxes.push(heap.safe_new(*val).unwrap());
33        }
34
35        for (i, dbox) in dboxes.iter().enumerate() {
36            assert_eq!(**dbox, vals[i]);
37        }
38
39        assert_eq!(heap.size(), 6);
40
41        dboxes.clear();
42
43        assert_eq!(heap.size(), 6);
44
45        for val in &vals {
46            dboxes.push(heap.safe_new(*val).unwrap());
47        }
48
49        for (i, dbox) in dboxes.iter().enumerate() {
50            assert_eq!(**dbox, vals[i]);
51        }
52
53        assert_eq!(heap.size(), 6);
54
55        for dbox in dboxes {
56            dbox.into_inner();
57        }
58
59        assert_eq!(heap.size(), 6);
60    }
61
62    struct ListNode<'a> {
63        value: i32,
64        next: Option<DBox<'a, ListNode<'a>>>,
65    }
66
67    #[test]
68    fn linked_list() {
69        let heap = DHeap::with_capacity(16);
70
71        let mut prev_node: Option<DBox<ListNode>> = None;
72
73        for value in 0..10 {
74            println!("Adding {}", value);
75            let node = heap
76                .safe_new(ListNode {
77                    value,
78                    next: prev_node.map(|node| heap.safe_new(node.into_inner()).unwrap()),
79                })
80                .unwrap();
81            prev_node = Some(node);
82        }
83
84        for _ in 0..4 {
85            if let Some(node) = prev_node {
86                println!("Popping {}", node.value);
87                prev_node = node.into_inner().next;
88            }
89        }
90
91        for value in 0..10 {
92            println!("Adding {}", value);
93            let node = heap
94                .safe_new(ListNode {
95                    value,
96                    next: prev_node.map(|node| heap.safe_new(node.into_inner()).unwrap()),
97                })
98                .unwrap();
99            prev_node = Some(node);
100        }
101
102        while let Some(node) = prev_node {
103            println!("Popping {}", node.value);
104            prev_node = node.into_inner().next;
105        }
106
107        println!("Final Size {}", heap.size());
108    }
109}