Bug in DoublePriorityQueue `iter_mut`
It looks like DoublePriorityQueue panics when calling next_back immediately on an iter_mut call to a DPQ.
use priority_queue::DoublePriorityQueue; #[test] fn iter_mut_next_back_panics_on_first_call() { let mut pq = DoublePriorityQueue::new(); pq.push("apples", 1); pq.push("bananas", 2); let mut iter = pq.iter_mut(); iter.next_back(); }
Running that test with RUST_BACKTRACE=1 cargo test --test dpq_iter_mut_next_back -- --no-capture:
thread 'iter_mut_next_back_panics_on_first_call' panicked at /home/takashi/current/priority-queue/src/double_priority_queue/iterators.rs:198:9:
attempt to subtract with overflow
That line is here.
Creation of iter_mut is here?
My guess is that pos is supposed to be at the end of the DPQ, but new creates it at the start, and then the next_back code runs which immediately subtracts with underflow. I think just having a front and back position and using those to keep state should suffice?