1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
mod priority_queues;
pub use self::priority_queues::{PriorityQueue,ReversePriorityQueue};

#[cfg(test)]
mod tests {
    use priority_queues::{PriorityQueue, ReversePriorityQueue};

    fn new_test_priority_queue<'a>() -> PriorityQueue<i32, &'a str>{
        let mut q = PriorityQueue::new();

        q.push(2, "a");
        q.push(-52, "b");
        q.push(9, "c");

        q
    }

    fn new_test_reverse_priority_queue<'a>() -> ReversePriorityQueue<i32, &'a str>{
        let mut q = ReversePriorityQueue::new();

        q.push(2, "a");
        q.push(-52, "b");
        q.push(9, "c");

        q
    }

    #[test]
    fn test_priority_queue_pop(){
        let mut q = new_test_priority_queue();

        assert_eq!(q.pop().unwrap(),(9, "c"));
        assert_eq!(q.pop().unwrap(),(2, "a"));
        assert_eq!(q.pop().unwrap(),(-52, "b"));
        assert_eq!(q.pop(),None);
    }

    #[test]
    fn test_reverse_priority_queue_pop(){
        let mut q = new_test_reverse_priority_queue();

        assert_eq!(q.pop().unwrap(),(-52, "b"));
        assert_eq!(q.pop().unwrap(),(2, "a"));
        assert_eq!(q.pop().unwrap(),(9, "c"));
        assert_eq!(q.pop(),None);
    }

    #[test]
    fn test_priority_queue_peek(){
        let mut q = new_test_priority_queue();

        assert_eq!(q.peek().unwrap(),(&9, &"c"));
        assert_eq!(q.pop().unwrap(),(9, "c"));
        assert_eq!(q.peek().unwrap(),(&2, &"a"));
        assert_eq!(q.pop().unwrap(),(2, "a"));
        assert_eq!(q.peek().unwrap(),(&-52, &"b"));
        assert_eq!(q.peek().unwrap(),(&-52, &"b"));
        assert_eq!(q.pop().unwrap(),(-52, "b"));
        assert_eq!(q.peek(),None);
        assert_eq!(q.pop(),None);
    }

    #[test]
    fn test_reverse_priority_queue_peek(){
        let mut q = new_test_reverse_priority_queue();

        assert_eq!(q.peek().unwrap(),(&-52, &"b"));
        assert_eq!(q.pop().unwrap(),(-52, "b"));
        assert_eq!(q.peek().unwrap(),(&2, &"a"));
        assert_eq!(q.pop().unwrap(),(2, "a"));
        assert_eq!(q.peek().unwrap(),(&9, &"c"));
        assert_eq!(q.peek().unwrap(),(&9, &"c"));
        assert_eq!(q.pop().unwrap(),(9, "c"));
        assert_eq!(q.peek(),None);
        assert_eq!(q.pop(),None);
    }

}