simple_collections/
queue.rs1use 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}