r_collections/list/
queue.rs1use crate::traits::{collection::Collection, list::{List, ListResults}};
2
3use super::linked_list::LinkedList;
4
5#[derive(Debug, Clone)]
6pub struct Queue<T: Clone + PartialEq> {
7 list: LinkedList<T>,
8}
9
10impl<T: Clone + PartialEq> Queue<T> {
11
12 pub fn new() -> Self {
13 Self {list: LinkedList::<T>::new()}
14 }
15
16 pub fn dequeue(&mut self) -> Result<T, ListResults> {
17 let result = self.list.remove(0);
18 match result {
19 Err(err) => return Err(err),
20 Ok(item) => {
21 return Ok(item);
22 },
23 }
24 }
25}
26
27impl<T: Clone + PartialEq> Collection<T> for Queue<T> {
28
29 fn is_empty(&self) -> bool {
30 self.list.len() == 0
31 }
32
33 fn len(&self) -> usize {
34 self.list.len()
35 }
36
37 fn contains(&self, data: T) -> bool {
38 self.list.contains(data)
39 }
40
41 fn insert(&mut self, data: T) {
42 self.list.append(data);
43 }
44}
45
46#[cfg(test)]
47
48mod queue_tests {
49 use crate::traits::collection::Collection;
50 use super::Queue;
51
52 #[test]
53 fn create_new_queue() {
54 let queue = Queue::<i8>::new();
55 assert!(queue.is_empty());
56 assert_eq!(queue.len(), 0);
57 }
58
59 #[test]
60 fn insert_test_if_queue_is_empty() {
61 let data = 1i8;
62 let mut queue = Queue::<i8>::new();
63
64 assert!(queue.is_empty());
65
66 queue.insert(data);
67
68 assert!(!queue.is_empty());
69 assert_eq!(queue.len(), 1);
70 }
71
72 #[test]
73 fn insert_test_with_many_items() {
74
75 let mut queue = Queue::<i8>::new();
76 assert!(queue.is_empty());
77
78 for i in 0..10 {
79 queue.insert(i);
80 }
81
82 assert_eq!(queue.len(), 10);
83
84
85 }
86
87 #[test]
88 fn dequeue_test() {
89 let mut queue = Queue::<i8>::new();
90
91 for i in 0..10 {
92 queue.insert(i);
93 }
94
95 assert!(!queue.is_empty());
96 assert_eq!(queue.len(), 10);
97
98 match queue.dequeue() {
99 Ok(item) => {
100 assert_eq!(item, 0);
101 },
102 Err(_) => panic!("Result must be some"),
103 }
104
105 assert_eq!(queue.len(), 9);
106 }
107
108 #[test]
109 fn dequeue_test_if_queue_is_empty() {
110 let mut queue = Queue::<i8>::new();
111
112 assert!(queue.is_empty());
113
114 match queue.dequeue() {
115 Ok(_) => panic!("Must be ListIsEmpty"),
116 Err(_) => (),
117 }
118 }
119
120 #[test]
121 fn queue_contains_test_if_item_contained() {
122 let data = 1i8;
123 let mut queue = Queue::<i8>::new();
124 queue.insert(data);
125 assert!(queue.contains(data));
126 }
127
128 #[test]
129 fn queue_contains_test_if_item_does_not_contained() {
130 let mut queue = Queue::<i8>::new();
131
132 queue.insert(1i8);
133
134 assert!(!queue.contains(2i8));
135 }
136}