Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug in DoublePriorityQueue.peek_min() #42

Closed
testforvln opened this issue Feb 1, 2023 · 6 comments
Closed

Bug in DoublePriorityQueue.peek_min() #42

testforvln opened this issue Feb 1, 2023 · 6 comments
Assignees
Labels

Comments

@testforvln
Copy link

After thounds of loops using change_priority() functions, I met with result of peek_min() function not returning the min priority item.

Has anyone come across this situation?

@garro95
Copy link
Owner

garro95 commented Feb 1, 2023

Are you able to reproduce the issue with a minimal example?

@garro95 garro95 added the bug label Feb 1, 2023
@garro95 garro95 self-assigned this Feb 1, 2023
@testforvln
Copy link
Author

use priority_queue::{DoublePriorityQueue, PriorityQueue};

fn main() {
let mut double_queue = DoublePriorityQueue::new();
let mut simple_queue = PriorityQueue::new();
let data = vec![23403.4, 23375.2, 23395.9, 23400.1, 23401.6, 23375.2, 23391.1, 23410.3, 23391.6, 23402.2, 23407.6, 23414.5, 23421.0, 23430.5, 23430.5, 23441.6, 23441.6, 23440.2, 23424.2, 23465.5, 23273.3, 23232.3, 23183.1, 23315.6, 23328.5, 23328.5, 23346.9, 23350.0, 23363.6, 23388.1, 23403.6, 23385.3, 23385.8, 23385.8, 23363.6, 23363.6, 23398.9, 23400.7, 23401.7, 23370.0, 23370.0, 23396.7, 23370.0, 23370.0, 23396.8, 23385.0, 23369.1, 23381.8, 23372.3, 23382.6, 23382.3, 23401.5, 23405.0, 23392.0, 23392.0, 23398.4, 23393.8, 23382.3, 23382.8, 23376.2, 23379.3, 23380.6, 23380.6, 23384.4, 23379.5, 23381.7, 23391.7, 23396.3, 23402.0, 23414.8, 23410.9, 23423.6, 23419.3, 23419.3, 23420.9, 23397.1, 23425.9, 23397.1, 23397.1, 23417.4, 23413.6, 23422.7, 23422.7, 23413.6, 23407.4, 23413.9, 23407.4, 23397.1, 23391.1, 23390.0, 23388.5, 23383.0, 23375.9, 23355.1, 23354.3, 23370.4, 23381.8, 23381.8, 23383.6, 23391.4, 23393.8, 23393.8, 23379.1, 23380.8, 23384.9, 23384.9, 23390.2, 23382.0, 23380.8, 23379.9, 23370.5, 23377.3, 23378.0, 23391.7, 23386.7, 23374.2, 23392.2, 23394.5, 23403.2, 23413.5, 23420.4, 23443.8, 23441.6, 23441.6, 23485.3, 23488.5, 23488.5, 23505.3, 23471.4, 23471.4, 23477.9, 23488.7, 23488.7, 23483.2, 23463.2, 23463.2, 23463.6, 23463.6, 23468.8, 23485.7, 23487.8, 23508.6, 23512.9, 23507.7, 23507.7, 23539.2, 23541.7, 23539.2, 23507.7, 23487.8, 23487.8, 23553.5, 23553.5, 23553.5, 23553.5, 23553.5, 23553.5, 23565.5, 23566.7, 23566.7, 23566.7, 23565.5, 23566.7, 23565.5, 23566.7, 23566.7, 23549.9, 23541.3, 23560.8, 23566.8, 23563.5, 23563.5, 23541.3, 23538.3, 23535.3, 23543.7, 23549.1, 23549.6, 23520.0, 23500.0, 23545.6, 23554.3, 23558.6, 23526.7, 23452.1, 23526.7, 23520.0, 23520.0, 23526.7, 23524.3, 23524.3, 23526.7, 23524.3, 23450.0, 23450.0, 23354.3, 23350.0, 23521.1, 23542.7, 23553.7];
let window = 32;
for idx in 0..window {
let val = (data[idx] * 1000.0 as f64).round() as i32;
simple_queue.push(idx, -val);
double_queue.push(idx, val);
}
for idx in window..data.len() {
let val = (data[idx] * 1000.0 as f64).round() as i32;
simple_queue.change_priority(&(idx % window), -val);
double_queue.change_priority(&(idx % window), val);
let simple_min_result = -simple_queue.peek().unwrap().1.clone();
let double_min_result = double_queue.peek_min().unwrap().1.clone();
if simple_min_result != double_min_result {
println!("{} {} {} ", idx, simple_min_result, double_min_result);
}
}
}

You can try this code.

@garro95 garro95 closed this as completed in e2500fa Feb 2, 2023
@garro95
Copy link
Owner

garro95 commented Feb 3, 2023

@testforvln Can I add your code, modified, to the test suite of DoublePriorityQueue?

@testforvln
Copy link
Author

@testforvln Can I add your code, modified, to the test suite of DoublePriorityQueue?

Of course, use the code as you wish.

@garro95
Copy link
Owner

garro95 commented Feb 3, 2023

Thanks for your contribution. Version 1.3.1 has been released, that includes the fix for this bug

@testforvln
Copy link
Author

Thanks for your contribution. Version 1.3.1 has been released, that includes the fix for this bug

Great! It's my pleasure to make subtle contribution to your project and the rust ecosystem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants