#[macro_use(new_c_queue)]
extern crate rb_tree;
use rb_tree::RBQueue;
fn from_origin(p: &(f64, f64)) -> f64 {
((p.0 * p.0) + (p.1 * p.1)).sqrt()
}
fn main() {
let mut q = new_c_queue!(|l: &(f64, f64), r| {
let l_dist = from_origin(l);
let r_dist = from_origin(r);
if l_dist == r_dist {
l.0 - r.0
} else {
l_dist - r_dist
}
});
q.insert((0.0, 0.0));
q.insert((-5.0, 0.0));
q.insert((2.0, 3.0));
q.insert((3.0, 2.0));
assert_eq!(
q.ordered(),
[&(0.0, 0.0), &(2.0, 3.0), &(3.0, 2.0), &(-5.0, 0.0)]
);
}