rustfst/algorithms/queues/
trivial_queue.rs1use crate::algorithms::{Queue, QueueType};
2use crate::StateId;
3
4#[derive(Debug, Default, Clone)]
8pub struct TrivialQueue {
9 state: Option<StateId>,
10}
11
12impl Queue for TrivialQueue {
13 fn head(&mut self) -> Option<StateId> {
14 self.state
15 }
16
17 fn enqueue(&mut self, state: StateId) {
18 self.state = Some(state);
19 }
20
21 fn dequeue(&mut self) -> Option<StateId> {
22 self.state.take()
23 }
24
25 fn update(&mut self, _state: StateId) {}
26
27 fn is_empty(&self) -> bool {
28 self.state.is_none()
29 }
30
31 fn clear(&mut self) {
32 self.state = None;
33 }
34
35 fn queue_type(&self) -> QueueType {
36 QueueType::TrivialQueue
37 }
38}
39
40#[cfg(test)]
41mod test {
42 use super::*;
43
44 use anyhow::Result;
45
46 #[test]
47 fn test_trivial_queue() -> Result<()> {
48 let mut queue = TrivialQueue::default();
49
50 assert_eq!(queue.head(), None);
51
52 queue.enqueue(2);
53 queue.enqueue(3);
54 assert_eq!(queue.head(), Some(3));
55 queue.dequeue();
56 assert_eq!(queue.head(), None);
57
58 queue.enqueue(2);
59 queue.enqueue(3);
60 assert!(!queue.is_empty());
61 assert_eq!(queue.head(), Some(3));
62 queue.clear();
63 assert_eq!(queue.head(), None);
64 assert!(queue.is_empty());
65 Ok(())
66 }
67}