algods 0.1.0

A collection of data structures and algorithms
Documentation
#[cfg(test)]
mod tests {
    use super::super::*;
    use rand::Rng;

    #[test]
    fn test_binary_heap_priority_queue() {
        let len = 10000000;
        let mut rng = rand::thread_rng();
        let mut queue = BinaryHeapQueue::<isize>::with_capacity(len);
        assert!(queue.is_empty());
        for _ in 0..len {
            queue.insert(rng.gen::<isize>());
        }
        assert_eq!(queue.len(), len);
        assert_eq!(
            queue.heap.peek().unwrap().clone(),
            queue.heap.pop().unwrap()
        );
    }

    #[test]
    #[should_panic]
    fn test_init_priority_queue() {
        PriorityQueue::<String>::with_capacity(0, Orientation::Min);
    }

    #[test]
    fn test_min_priority_queue() {
        let len = 1000000;
        let mut rng = rand::thread_rng();
        let mut queue = PriorityQueue::<isize>::with_capacity(2, Orientation::Min);
        assert!(queue.is_empty());
        queue.insert(rng.gen::<isize>());
        assert_eq!(queue.len(), 1);
        queue.insert(rng.gen::<isize>());
        assert_eq!(queue.vec.len(), 6);
        for _ in 0..len - 2 {
            queue.insert(rng.gen::<isize>());
        }
        queue.delete();
        assert_eq!(queue.len(), len - 1);
        assert_eq!(queue.extremum(), queue.vec[1].as_ref());
        for k in 1..(queue.len() - 1) / 2 {
            assert!(queue.vec[k] <= queue.vec[2 * k] && queue.vec[k] <= queue.vec[2 * k + 1]);
        }
    }

    #[test]
    fn test_max_priority_queue() {
        let len = 1000000;
        let mut rng = rand::thread_rng();
        let mut queue = PriorityQueue::<isize>::with_capacity(2, Orientation::Max);
        assert!(queue.is_empty());
        queue.insert(rng.gen::<isize>());
        assert_eq!(queue.len(), 1);
        queue.insert(rng.gen::<isize>());
        assert_eq!(queue.vec.len(), 6);
        for _ in 0..len - 2 {
            queue.insert(rng.gen::<isize>());
        }
        queue.delete();
        assert_eq!(queue.len(), len - 1);
        assert_eq!(queue.extremum(), queue.vec[1].as_ref());
        for k in 1..(queue.len() - 1) / 2 {
            assert!(queue.vec[k] >= queue.vec[2 * k] && queue.vec[k] >= queue.vec[2 * k + 1]);
        }
    }
}