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}