simple_collections/
queue.rs

1use std::collections::VecDeque;
2
3#[derive(Debug)]
4pub struct Queue<T> {
5    queue: VecDeque<T>,
6}
7
8impl<T> Queue<T> {
9    pub fn new() -> Self {
10        Queue { queue: VecDeque::new() }
11    }
12    pub fn push(&mut self, val: T) {
13        self.queue.push_back(val);
14    }
15    pub fn pop(&mut self) -> Option<T> {
16        self.queue.pop_front()
17    }
18    pub fn size(&self) -> usize {
19        self.queue.len()
20    }
21    pub fn empty(&self) -> bool {
22        self.size() == 0
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    fn test() {
30        let mut q = Queue::new();
31        assert_eq!(q.size(), 0);
32        assert!(q.empty());
33        assert_eq!(q.pop(), None);
34        q.push(1);
35        assert!(!q.empty());
36        assert_eq!(q.size(), 1); 
37        q.push(2);
38        assert_eq!(q.size(), 2);
39        q.push(3); 
40        assert_eq!(q.size(), 3);
41        assert_eq!(q.pop(), Some(1));
42        assert_eq!(q.pop(), Some(2));
43        assert_eq!(q.pop(), Some(3));
44        assert_eq!(q.pop(), None);
45        assert_eq!(q.size(), 0);
46        assert!(q.empty());
47    }
48}