eldek-tad 0.9.1

A project for learning Abstract Data Types (ADTs) in Rust. Heavily inspired by Java's implementation.
Documentation
#[cfg(test)]
mod test{
    use crate::heap::heap::Heap;
    use crate::heap::traits::heap_traits::HeapTrait;

    #[test]
    fn create(){
        let _heap:Heap<i8, String> = Heap::new(true, 10);
    }

    #[test]
    fn push_max(){
        let mut heap:Heap<i8, &str> = Heap::new(false, 10);

        heap.push(6, "Pasta");
        heap.push(10, "Pizza");
        assert_eq!(heap.peek().unwrap(), (&10, &"Pizza"));
        assert_eq!(heap.size(), 2);
    }

    #[test]
    fn push_min(){
        let mut heap:Heap<i8, &str> = Heap::new(true, 10);

        heap.push(6, "Pasta");
        heap.push(10, "Pizza");
        assert_eq!(heap.peek().unwrap(), (&6, &"Pasta"));
        assert_eq!(heap.size(), 2);
    }

    #[test]
    fn peek(){
        let mut heap:Heap<i8, &str> = Heap::new(true, 10);

        heap.push(6, "Pasta");
        heap.push(10, "Pizza");
        assert_eq!(heap.peek().unwrap(), (&6, &"Pasta"));
    }

    #[test]
    fn peek_mut(){
        let mut heap:Heap<i8, &str> = Heap::new(true, 10);

        heap.push(6, "Pasta");
        heap.push(10, "Pizza");
        assert_eq!(heap.peek_mut().unwrap(), (&6, &mut "Pasta"));
    }

    #[test]
    fn pop_max(){
        let mut heap:Heap<i8, &str> = Heap::new(true, 10);

        heap.push(10, "Hamburger");
        heap.push(6, "Pasta");
        assert_eq!(heap.pop().unwrap(), (6, "Pasta"));
        assert_eq!(heap.size(), 1);
    }
    #[test]
    fn pop_min(){
        let mut heap:Heap<i8, &str> = Heap::new(false, 10);

        heap.push(10, "Hamburger");
        heap.push(6, "Pasta");
        assert_eq!(heap.pop().unwrap(), (10, "Hamburger"));
        assert_eq!(heap.size(), 1);
    }
    #[test]
    fn resize_test(){
        let mut heap:Heap<i8, &str> = Heap::new(false, 2);

        heap.push(10, "Pizza");
        heap.push(9, "Sushi");
        heap.push(10, "Tacos");
        heap.push(10, "Milanesa");
        heap.push(3, "Ensalada");
        heap.push(10, "Ramen");
        heap.push(10, "Empanadas");
        heap.push(10, "Asado");
        heap.push(7, "Sandwich");
        heap.push(7, "Hot Dog");
        heap.push(-3, "Salad");

        assert_eq!(heap.size(), 11);
    }
    #[test]
    fn pop_empty() {
        let mut heap: Heap<i8, &str> = Heap::new(true, 10);
        assert!(heap.pop().is_err());
    }
    #[test]
    fn peek_empty() {
        let heap: Heap<i8, &str> = Heap::new(true, 10);
        assert!(heap.peek().is_err());
    }
    #[test]
    fn pop_order_max() {
        let mut heap: Heap<i32, &str> = Heap::new(false, 10);

        heap.push(5, "A");
        heap.push(10, "B");
        heap.push(3, "C");
        heap.push(8, "D");

        assert_eq!(heap.pop().unwrap().0, 10);
        assert_eq!(heap.pop().unwrap().0, 8);
        assert_eq!(heap.pop().unwrap().0, 5);
        assert_eq!(heap.pop().unwrap().0, 3);
    }
    #[test]
    fn same_priority() {
        let mut heap: Heap<i8, &str> = Heap::new(false, 10);

        heap.push(10, "A");
        heap.push(10, "B");
        heap.push(10, "C");

        assert_eq!(heap.size(), 3);
    }
    #[test]
    fn reuse_after_empty() {
        let mut heap: Heap<i8, &str> = Heap::new(false, 10);

        heap.push(5, "A");
        assert!(heap.pop().is_ok());
        heap.push(8, "B");

        assert_eq!(heap.peek().unwrap().0, &8);
    }
}