diff --git a/src/backing/item.rs b/src/backing/item.rs deleted file mode 100644 index 424bf45..0000000 --- a/src/backing/item.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::cmp::Ordering; - -/// Helper struct to associate an item with its priority -#[derive(Debug, Clone, Copy)] -pub struct Item { - data: D, - priority: P, -} - -impl Item { - /// Creates a new instance - fn new(data: D, priority: P) -> Self { - Self { data, priority } - } - - /// Retrieve the internal data, it would be nicer to implement this using [`From`] or [`Into`], but I don't see a way to do that using generics - fn data(self) -> D { - self.data - } -} - -// The relevant Ord implementations are based just on the priority -impl Ord for Item { - fn cmp(&self, other: &Self) -> Ordering { - self.priority.cmp(&other.priority) - } -} - -impl PartialOrd for Item { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - -impl PartialEq for Item { - fn eq(&self, other: &Self) -> bool { - self.priority == other.priority - } -} - -impl Eq for Item {} diff --git a/src/backing/keyed/mod.rs b/src/backing/keyed/mod.rs index 58077c5..a574e73 100644 --- a/src/backing/keyed/mod.rs +++ b/src/backing/keyed/mod.rs @@ -1,5 +1,34 @@ /// Data structures for the "keyed" min-queues, supporting priority updates and arbitrary removals, but no duplicates -use super::{item::Item, pure::PureBacking}; +use super::pure::PureBacking; +use std::cmp::Ordering; + +/// Helper struct to associate an item with its priority +#[derive(Debug, Copy, Clone)] +pub struct Item { + data: D, + priority: P, +} + +// The relevant Ord implementations are based just on the priority +impl Ord for Item { + fn cmp(&self, other: &Self) -> Ordering { + self.priority.cmp(&other.priority) + } +} + +impl PartialOrd for Item { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl PartialEq for Item { + fn eq(&self, other: &Self) -> bool { + self.priority == other.priority + } +} + +impl Eq for Item {} /// A data structure usable for backing a "keyed" queue pub trait KeyedBacking: PureBacking> { diff --git a/src/backing/mod.rs b/src/backing/mod.rs index f66e16c..ea87b12 100644 --- a/src/backing/mod.rs +++ b/src/backing/mod.rs @@ -1,3 +1,2 @@ -pub mod item; pub mod keyed; pub mod pure; diff --git a/src/backing/pure/binary_heap.rs b/src/backing/pure/binary_heap.rs index 4d79d97..5195756 100644 --- a/src/backing/pure/binary_heap.rs +++ b/src/backing/pure/binary_heap.rs @@ -103,18 +103,6 @@ impl BinaryHeap { } } -impl FromIterator for BinaryHeap { - fn from_iter>(iter: U) -> Self { - let mut this = Self { - data: Vec::from_iter(iter), - }; - for i in (0..=(this.data.len() / 2)).rev() { - this.sift_down(i); - } - this - } -} - impl PureBacking for BinaryHeap { fn new() -> Self { Self { data: vec![] } diff --git a/src/backing/pure/mod.rs b/src/backing/pure/mod.rs index 9d82347..24f69c9 100644 --- a/src/backing/pure/mod.rs +++ b/src/backing/pure/mod.rs @@ -2,7 +2,7 @@ pub mod binary_heap; /// A data structure usable for backing a "pure" queue -pub trait PureBacking: FromIterator { +pub trait PureBacking { /// Instantiates a new data structure fn new() -> Self; /// Places an item into the queue diff --git a/tests/pure_binary_heap.rs b/tests/pure_binary_heap.rs index 597d6eb..a6326c2 100644 --- a/tests/pure_binary_heap.rs +++ b/tests/pure_binary_heap.rs @@ -3,26 +3,26 @@ mod tests { use pyority_queue::backing::pure::{binary_heap::BinaryHeap, PureBacking}; #[test] - fn test_pure_binary_heap_manual_creation() { + fn test_pure_binary_heap() { let mut heap = BinaryHeap::new(); + assert_eq!(heap.len(), 0); heap.add(4); + assert_eq!(heap.len(), 1); heap.add(-3); + assert_eq!(heap.len(), 2); heap.add(6); + assert_eq!(heap.len(), 3); heap.add(1); + assert_eq!(heap.len(), 4); assert_eq!(heap.pop(), Some(-3)); + assert_eq!(heap.len(), 3); assert_eq!(heap.pop(), Some(1)); + assert_eq!(heap.len(), 2); assert_eq!(heap.pop(), Some(4)); + assert_eq!(heap.len(), 1); assert_eq!(heap.pop(), Some(6)); + assert_eq!(heap.len(), 0); assert_eq!(heap.pop(), None); - } - - #[test] - fn test_pure_binary_heap_from_iter() { - let mut heap = BinaryHeap::from_iter(vec![7, 3, 6, 9]); - assert_eq!(heap.pop(), Some(3)); - assert_eq!(heap.pop(), Some(6)); - assert_eq!(heap.pop(), Some(7)); - assert_eq!(heap.pop(), Some(9)); - assert_eq!(heap.pop(), None); + assert_eq!(heap.len(), 0); } }