use fix_float::*; use rand::{self, prelude::SliceRandom}; use std::collections::BinaryHeap; #[test] fn simple() { let mut heap: BinaryHeap = BinaryHeap::new(); heap.push(ff64!(0.0)); heap.push(ff64!(5.0)); heap.push(ff64!(8.0)); heap.push(ff64!(3.0)); heap.push(ff64!(-0.0)); heap.push(ff64!(3.0)); heap.push(ff64!(1.0)); heap.push(ff64!(9.0)); assert_eq!(heap.pop(), Some(ff64!(9.0))); assert_eq!(heap.pop(), Some(ff64!(8.0))); assert_eq!(heap.pop(), Some(ff64!(5.0))); assert_eq!(heap.pop(), Some(ff64!(3.0))); assert_eq!(heap.pop(), Some(ff64!(3.0))); assert_eq!(heap.pop(), Some(ff64!(1.0))); assert_eq!(heap.pop(), Some(ff64!(0.0))); assert_eq!(heap.pop(), Some(ff64!(0.0))); assert_eq!(heap.pop(), None); } #[test] fn range() { let mut heap: BinaryHeap = BinaryHeap::new(); let mut vec = Vec::new(); for i in 0..=1000 { vec.push(i as f64); } vec.shuffle(&mut rand::thread_rng()); for elem in vec { heap.push(ff64!(elem)); } let mut index = 1000; while index >= 0 { assert_eq!(*heap.pop().unwrap(), index as f64); index -= 1; } assert_eq!(heap.pop(), None) }