my_lib/queue/
queue.rs

1pub struct Queue<T> {
2    items: Vec<T>,
3}
4
5impl<T> Queue<T> {
6    pub fn new() -> Self {
7        Queue { items: Vec::new() }
8    }
9
10    pub fn size(&self) -> usize {
11        self.items.len()
12    }
13
14    pub fn enqueue(&mut self, item: T) {
15        self.items.push(item)
16    }
17
18    pub fn dequeue(&mut self) -> Option<T> {
19        if self.items.len() == 0 {
20            None
21        } else {
22            Some(self.items.remove(0))
23        }
24    }
25
26    pub fn is_empty(&self) -> bool {
27        return self.size() == 0;
28    }
29
30    pub fn front(&self) -> Option<&T> {
31        self.items.first()
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn test_enqueue() {
41        let mut q = Queue::<i32>::new();
42        q.enqueue(1);
43        q.enqueue(2);
44        assert_eq!(q.size(), 2);
45        assert_eq!(q.front(), Some(&1));
46    }
47
48    #[test]
49    fn test_dequeue() {
50        let mut q = Queue::<i32>::new();
51        q.enqueue(1);
52        q.enqueue(2);
53        assert_eq!(q.dequeue(), Some(1));
54        assert_eq!(q.size(), 1);
55        assert_eq!(q.front(), Some(&2));
56        assert_eq!(q.dequeue(), Some(2));
57        assert_eq!(q.size(), 0);
58        assert_eq!(q.front(), (None));
59    }
60}