Skip to content

Commit b9ed34c

Browse files
Merge branch 'feature/internal_queue' into feature/maxflow
2 parents 43dfa84 + 0859129 commit b9ed34c

File tree

1 file changed

+62
-2
lines changed

1 file changed

+62
-2
lines changed

src/internal_queue.rs

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![allow(dead_code)]
2+
13
#[derive(Default)]
24
pub(crate) struct SimpleQueue<T> {
35
payload: Vec<T>,
@@ -24,8 +26,12 @@ impl<T> SimpleQueue<T> {
2426
}
2527

2628
// Do we need mutable version?
27-
pub(crate) fn front(&self) -> &T {
28-
&self.payload[self.pos]
29+
pub(crate) fn front(&self) -> Option<&T> {
30+
if self.pos < self.payload.len() {
31+
Some(&self.payload[self.pos])
32+
} else {
33+
None
34+
}
2935
}
3036

3137
pub(crate) fn clear(&mut self) {
@@ -42,3 +48,57 @@ impl<T> SimpleQueue<T> {
4248
}
4349
}
4450
}
51+
52+
#[cfg(test)]
53+
mod test {
54+
use crate::internal_queue::SimpleQueue;
55+
56+
#[allow(clippy::cognitive_complexity)]
57+
#[test]
58+
fn test_simple_queue() {
59+
let mut queue = SimpleQueue::default();
60+
61+
assert_eq!(queue.size(), 0);
62+
assert!(queue.empty());
63+
assert!(queue.front().is_none());
64+
assert!(queue.pop().is_none());
65+
66+
queue.push(123);
67+
68+
assert_eq!(queue.size(), 1);
69+
assert!(!queue.empty());
70+
assert_eq!(queue.front(), Some(&123));
71+
72+
queue.push(456);
73+
74+
assert_eq!(queue.size(), 2);
75+
assert!(!queue.empty());
76+
assert_eq!(queue.front(), Some(&123));
77+
78+
assert_eq!(queue.pop(), Some(&123));
79+
assert_eq!(queue.size(), 1);
80+
assert!(!queue.empty());
81+
assert_eq!(queue.front(), Some(&456));
82+
83+
queue.push(789);
84+
queue.push(789);
85+
queue.push(456);
86+
queue.push(456);
87+
88+
assert_eq!(queue.size(), 5);
89+
assert!(!queue.empty());
90+
assert_eq!(queue.front(), Some(&456));
91+
92+
assert_eq!(queue.pop(), Some(&456));
93+
assert_eq!(queue.size(), 4);
94+
assert!(!queue.empty());
95+
assert_eq!(queue.front(), Some(&789));
96+
97+
queue.clear();
98+
99+
assert_eq!(queue.size(), 0);
100+
assert!(queue.empty());
101+
assert!(queue.front().is_none());
102+
assert!(queue.pop().is_none());
103+
}
104+
}

0 commit comments

Comments
 (0)