diff options
author | Alex Auvolat <alex@adnab.me> | 2021-10-20 16:32:47 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-10-20 16:32:47 +0200 |
commit | e9add586a5fd6304473b9138b920e325629346f5 (patch) | |
tree | 0f2362058e12bbb0e27c2a71c887bed42d4114a4 /src | |
parent | de981aace0e47a1fa65b38212ac21d91e52f7c15 (diff) | |
download | netapp-e9add586a5fd6304473b9138b920e325629346f5.tar.gz netapp-e9add586a5fd6304473b9138b920e325629346f5.zip |
Add test for priority queue (it seems to work as intended)
Diffstat (limited to 'src')
-rw-r--r-- | src/proto.rs | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/proto.rs b/src/proto.rs index f91ffc7..bf82e47 100644 --- a/src/proto.rs +++ b/src/proto.rs @@ -204,3 +204,97 @@ pub(crate) trait RecvLoop: Sync + 'static { } } } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_priority_queue() { + let i1 = SendQueueItem { + id: 1, + prio: PRIO_NORMAL, + data: vec![], + cursor: 0, + }; + let i2 = SendQueueItem { + id: 2, + prio: PRIO_HIGH, + data: vec![], + cursor: 0, + }; + let i2bis = SendQueueItem { + id: 20, + prio: PRIO_HIGH, + data: vec![], + cursor: 0, + }; + let i3 = SendQueueItem { + id: 3, + prio: PRIO_HIGH | PRIO_SECONDARY, + data: vec![], + cursor: 0, + }; + let i4 = SendQueueItem { + id: 4, + prio: PRIO_BACKGROUND | PRIO_SECONDARY, + data: vec![], + cursor: 0, + }; + let i5 = SendQueueItem { + id: 5, + prio: PRIO_BACKGROUND | PRIO_PRIMARY, + data: vec![], + cursor: 0, + }; + + let mut q = SendQueue::new(); + + q.push(i1); // 1 + let a = q.pop().unwrap(); // empty -> 1 + assert_eq!(a.id, 1); + assert!(q.pop().is_none()); + + q.push(a); // 1 + q.push(i2); // 2 1 + q.push(i2bis); // [2 20] 1 + let a = q.pop().unwrap(); // 20 1 -> 2 + assert_eq!(a.id, 2); + let b = q.pop().unwrap(); // 1 -> 20 + assert_eq!(b.id, 20); + let c = q.pop().unwrap(); // empty -> 1 + assert_eq!(c.id, 1); + assert!(q.pop().is_none()); + + q.push(a); // 2 + q.push(b); // [2 20] + q.push(c); // [2 20] 1 + q.push(i3); // [2 20] 3 1 + q.push(i4); // [2 20] 3 1 4 + q.push(i5); // [2 20] 3 1 5 4 + + let a = q.pop().unwrap(); // 20 3 1 5 4 -> 2 + assert_eq!(a.id, 2); + q.push(a); // [20 2] 3 1 5 4 + + let a = q.pop().unwrap(); // 2 3 1 5 4 -> 20 + assert_eq!(a.id, 20); + let b = q.pop().unwrap(); // 3 1 5 4 -> 2 + assert_eq!(b.id, 2); + q.push(b); // 2 3 1 5 4 + let b = q.pop().unwrap(); // 3 1 5 4 -> 2 + assert_eq!(b.id, 2); + let c = q.pop().unwrap(); // 1 5 4 -> 3 + assert_eq!(c.id, 3); + q.push(b); // 2 1 5 4 + let b = q.pop().unwrap(); // 1 5 4 -> 2 + assert_eq!(b.id, 2); + let e = q.pop().unwrap(); // 5 4 -> 1 + assert_eq!(e.id, 1); + let f = q.pop().unwrap(); // 4 -> 5 + assert_eq!(f.id, 5); + let g = q.pop().unwrap(); // empty -> 4 + assert_eq!(g.id, 4); + assert!(q.pop().is_none()); + } +} |