From 5b5987b1751175fedb67d0231aa84866f2add318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Borgna?= <121866228+aborgna-q@users.noreply.github.com> Date: Tue, 18 Mar 2025 12:11:51 +0000 Subject: [PATCH 1/6] Specify MSRV --- Cargo.toml | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 42afaad..b4dc5ec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ keywords = ["priority", "queue", "heap"] categories = ["data-structures", "algorithms"] license = "LGPL-3.0-or-later OR MPL-2.0" edition = "2024" +rust-version = "1.85" [build-dependencies] autocfg = "1" diff --git a/README.md b/README.md index 304cde3..c7f32bf 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![crate](https://img.shields.io/crates/v/priority-queue.svg)](https://crates.io/crates/priority-queue) [![Build](https://github.com/garro95/priority-queue/actions/workflows/build.yml/badge.svg)](https://github.com/garro95/priority-queue/actions/workflows/build.yml) [![Test](https://github.com/garro95/priority-queue/actions/workflows/test.yml/badge.svg)](https://github.com/garro95/priority-queue/actions/workflows/test.yml) +![MSRV](https://img.shields.io/crates/msrv/priority-queue) This crate implements a Priority Queue with a function to change the priority of an object. Priority and items are stored in an `IndexMap` and the queue is implemented as a Heap of indexes. From f9342b4e4c09d179406920f8c84577cd913faf6f Mon Sep 17 00:00:00 2001 From: Gianmarco Garrisi Date: Wed, 19 Mar 2025 09:41:49 +0100 Subject: [PATCH 2/6] Revert "Update Edition" This reverts commit 6422a9697905b9dc118ca17c9b455dcfbcbd5ce8. --- Cargo.toml | 3 +-- benches/priority_queue.rs | 2 +- src/double_priority_queue/mod.rs | 2 +- src/priority_queue/mod.rs | 2 +- src/store.rs | 16 +++++++--------- tests/double_priority_queue.rs | 2 +- tests/priority_queue.rs | 2 +- 7 files changed, 13 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b4dc5ec..92dcdf8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,8 +9,7 @@ readme = "README.md" keywords = ["priority", "queue", "heap"] categories = ["data-structures", "algorithms"] license = "LGPL-3.0-or-later OR MPL-2.0" -edition = "2024" -rust-version = "1.85" +edition = "2021" [build-dependencies] autocfg = "1" diff --git a/benches/priority_queue.rs b/benches/priority_queue.rs index b79edfc..4a195ae 100644 --- a/benches/priority_queue.rs +++ b/benches/priority_queue.rs @@ -33,7 +33,7 @@ mod benchmarks { extern crate test; use hashbrown::hash_map::DefaultHashBuilder; use priority_queue::{DoublePriorityQueue, PriorityQueue}; - use test::{Bencher, black_box}; + use test::{black_box, Bencher}; #[bench] fn push_and_pop(b: &mut Bencher) { diff --git a/src/double_priority_queue/mod.rs b/src/double_priority_queue/mod.rs index d798fe8..b86cc18 100644 --- a/src/double_priority_queue/mod.rs +++ b/src/double_priority_queue/mod.rs @@ -34,9 +34,9 @@ pub mod iterators; #[cfg(not(feature = "std"))] use std::vec::Vec; -use crate::TryReserveError; use crate::core_iterators::*; use crate::store::{Index, Position, Store}; +use crate::TryReserveError; use iterators::*; use std::borrow::Borrow; diff --git a/src/priority_queue/mod.rs b/src/priority_queue/mod.rs index a286f58..5c7972c 100644 --- a/src/priority_queue/mod.rs +++ b/src/priority_queue/mod.rs @@ -35,9 +35,9 @@ pub mod iterators; #[cfg(not(feature = "std"))] use std::vec::Vec; -use crate::TryReserveError; use crate::core_iterators::*; use crate::store::{Index, Position, Store}; +use crate::TryReserveError; use iterators::*; use std::borrow::Borrow; diff --git a/src/store.rs b/src/store.rs index 018bf86..8a184cc 100644 --- a/src/store.rs +++ b/src/store.rs @@ -30,8 +30,8 @@ use std::vec::Vec; // an improvement in terms of complexity would be to use a bare HashMap // as vec instead of the IndexMap -use crate::TryReserveError; use crate::core_iterators::*; +use crate::TryReserveError; use std::borrow::Borrow; use std::cmp::{Eq, Ord}; @@ -302,14 +302,12 @@ impl Store { } #[inline(always)] - pub unsafe fn get_priority_from_position(&self, position: Position) -> &P { - unsafe { - self.map - .get_index(self.heap.get_unchecked(position.0).0) - .unwrap() - .1 - } - } + pub unsafe fn get_priority_from_position(&self, position: Position) -> &P { unsafe { + self.map + .get_index(self.heap.get_unchecked(position.0).0) + .unwrap() + .1 + }} } impl Store diff --git a/tests/double_priority_queue.rs b/tests/double_priority_queue.rs index 0f7a168..6a608eb 100644 --- a/tests/double_priority_queue.rs +++ b/tests/double_priority_queue.rs @@ -1040,7 +1040,7 @@ mod doublepq_tests { #[cfg(all(feature = "serde", test))] mod serde_tests_basics { use priority_queue::DoublePriorityQueue; - use serde_test::{Token, assert_tokens}; + use serde_test::{assert_tokens, Token}; #[test] fn serde_empty() { let pq: DoublePriorityQueue = DoublePriorityQueue::new(); diff --git a/tests/priority_queue.rs b/tests/priority_queue.rs index 3ae9e21..fc0f913 100644 --- a/tests/priority_queue.rs +++ b/tests/priority_queue.rs @@ -854,7 +854,7 @@ mod pqueue_tests { #[cfg(all(feature = "serde", test))] mod serde_tests_basics { use priority_queue::PriorityQueue; - use serde_test::{Token, assert_tokens}; + use serde_test::{assert_tokens, Token}; #[test] fn serde_empty() { let pq: PriorityQueue = PriorityQueue::new(); From ba73a53ab1ba6f41c8eda22bcb57a17ebf85adb0 Mon Sep 17 00:00:00 2001 From: Gianmarco Garrisi Date: Thu, 20 Mar 2025 08:39:39 +0100 Subject: [PATCH 3/6] Undo clippy lint use `is_none_or` instead of `map_or(true, ...)` --- src/double_priority_queue/mod.rs | 4 ++-- src/priority_queue/mod.rs | 4 ++-- src/store.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/double_priority_queue/mod.rs b/src/double_priority_queue/mod.rs index b86cc18..8aa387d 100644 --- a/src/double_priority_queue/mod.rs +++ b/src/double_priority_queue/mod.rs @@ -612,7 +612,7 @@ where /// /// Computes in **O(log(N))** time. pub fn push_increase(&mut self, item: I, priority: P) -> Option

{ - if self.get_priority(&item).is_none_or(|p| priority > *p) { + if self.get_priority(&item).map_or(true, |p| priority > *p) { self.push(item, priority) } else { Some(priority) @@ -650,7 +650,7 @@ where /// /// Computes in **O(log(N))** time. pub fn push_decrease(&mut self, item: I, priority: P) -> Option

{ - if self.get_priority(&item).is_none_or(|p| priority < *p) { + if self.get_priority(&item).map_or(true, |p| priority < *p) { self.push(item, priority) } else { Some(priority) diff --git a/src/priority_queue/mod.rs b/src/priority_queue/mod.rs index 5c7972c..f9ab242 100644 --- a/src/priority_queue/mod.rs +++ b/src/priority_queue/mod.rs @@ -486,7 +486,7 @@ where /// /// Computes in **O(log(N))** time. pub fn push_increase(&mut self, item: I, priority: P) -> Option

{ - if self.get_priority(&item).is_none_or(|p| priority > *p) { + if self.get_priority(&item).map_or(true, |p| priority > *p) { self.push(item, priority) } else { Some(priority) @@ -524,7 +524,7 @@ where /// /// Computes in **O(log(N))** time. pub fn push_decrease(&mut self, item: I, priority: P) -> Option

{ - if self.get_priority(&item).is_none_or(|p| priority < *p) { + if self.get_priority(&item).map_or(true, |p| priority < *p) { self.push(item, priority) } else { Some(priority) diff --git a/src/store.rs b/src/store.rs index 8a184cc..8445448 100644 --- a/src/store.rs +++ b/src/store.rs @@ -330,8 +330,8 @@ where self.map.retain2(predicate); if self.map.len() != self.size { self.size = self.map.len(); - self.heap = (0..self.size).into_iter().map(|i| Index(i)).collect(); - self.qp = (0..self.size).into_iter().map(|p| Position(p)).collect(); + self.heap = (0..self.size).map(Index).collect(); + self.qp = (0..self.size).map(Position).collect(); } } From 5f63ba9486a612c36ab59b853f6b4ca0294cbd5a Mon Sep 17 00:00:00 2001 From: Gianmarco Garrisi Date: Sat, 22 Mar 2025 15:34:27 +0100 Subject: [PATCH 4/6] Declare and verify MSRV --- .github/workflows/static-checks.yml | 8 ++++++++ Cargo.toml | 1 + 2 files changed, 9 insertions(+) diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml index 2733e20..34c6753 100644 --- a/.github/workflows/static-checks.yml +++ b/.github/workflows/static-checks.yml @@ -34,3 +34,11 @@ jobs: with: components: miri - run: cargo miri test + + msrv-verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master + - run: cargo install cargo-msrv + - run: cargo msrv verify diff --git a/Cargo.toml b/Cargo.toml index 92dcdf8..0d0a14a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ keywords = ["priority", "queue", "heap"] categories = ["data-structures", "algorithms"] license = "LGPL-3.0-or-later OR MPL-2.0" edition = "2021" +rust-version = "1.65.0" [build-dependencies] autocfg = "1" From c7bbd44937330f6cbf97c1b8a295a02779cf6b80 Mon Sep 17 00:00:00 2001 From: Gianmarco Garrisi Date: Sat, 22 Mar 2025 15:39:23 +0100 Subject: [PATCH 5/6] fmt --- src/store.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/store.rs b/src/store.rs index 8445448..2431b7c 100644 --- a/src/store.rs +++ b/src/store.rs @@ -302,12 +302,14 @@ impl Store { } #[inline(always)] - pub unsafe fn get_priority_from_position(&self, position: Position) -> &P { unsafe { - self.map - .get_index(self.heap.get_unchecked(position.0).0) - .unwrap() - .1 - }} + pub unsafe fn get_priority_from_position(&self, position: Position) -> &P { + unsafe { + self.map + .get_index(self.heap.get_unchecked(position.0).0) + .unwrap() + .1 + } + } } impl Store From ef8873311f5cad82c1f462cbd7fa486e58a5b34c Mon Sep 17 00:00:00 2001 From: Gianmarco Garrisi Date: Sat, 22 Mar 2025 15:41:46 +0100 Subject: [PATCH 6/6] Stable toolchain --- .github/workflows/static-checks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml index 34c6753..ba76936 100644 --- a/.github/workflows/static-checks.yml +++ b/.github/workflows/static-checks.yml @@ -39,6 +39,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@master + - uses: dtolnay/rust-toolchain@stable - run: cargo install cargo-msrv - - run: cargo msrv verify + - run: cargo msrv verify --all-features