gavl 0.1.5

A fast implementation for a map and a set using an AVL tree
Documentation
use super::*;


pub(crate) fn print_type_of<KeyType>(_: &KeyType) {
    println!("{}", std::any::type_name::<KeyType>())
}

mod avl_test{
    use super::*;
    
    #[test]
    fn clone() {
        const SIZE:i32 = 15;
        let mut map:Map<_,_> = (0..SIZE).map(|x|SIZE-x).enumerate().collect();
        println!("{:#?}", map);
        let map_clone = map.clone();
        map.empty();
        println!("{:#?}", map_clone);
        println!("{:#?}", map);
    }
    
    #[test]
    fn collect() {
        const SIZE:i32 = 31;
        let vec:Vec<_> = (0..SIZE).map(|x|SIZE-x).enumerate().collect();
        println!("{:?}", vec);
        let map:Map<_,_> = (0..SIZE).map(|x|SIZE-x).enumerate().collect();
        println!("{:#?}", map);
    }
    
    #[test]
    fn individual_remove() {
        let mut avl = Map::<u64,u64>::new();
        avl.add(2, 69).unwrap();
        let remove_value = avl.remove(&2).unwrap();
        assert_eq!(remove_value, 69);
        assert_eq!(avl.len(), 0);
        avl.add(2, 69).unwrap();
        avl.remove(&4).unwrap_err();
        assert_eq!(avl.len(), 1);
    }
    
    #[test]
    fn individual_delete() {
        let mut avl = Map::<u64,u64>::new();
        avl.add(2, 100).unwrap();
        avl.delete(&2).unwrap();
        assert_eq!(avl.len(), 0);
        avl.add(2, 100).unwrap();
        avl.delete(&4).unwrap_err();
        assert_eq!(avl.len(), 1);
    }
    
    #[test]
    fn deletion_double_balance() { 
        let mut avl = Map::<u64,u64>::new();
        for elem in 4+0..4+15 {
            avl.add(elem*2, 100).unwrap();
        }
        avl.add(17, 100).unwrap();
        println!("{:#?}", &avl);
        avl.delete(&22).unwrap();
        println!("{:#?}", &avl);
    }
    
    #[test]
    fn deletion_simple_balance() { 
        let mut avl = Map::<u64,u64>::new();
        for elem in 4+0..4+15 {
            avl.add(elem*2, 100).unwrap();
        }
        avl.add(15, 100).unwrap();
        avl.delete(&22).unwrap();
        println!("{:#?}", &avl);
    }
    
    #[test]
    fn deletion_index_propagation() { 
        let mut avl = Map::<u64,u64>::new();
        
        for elem in 4+0..4+15 {
            avl.add(elem*2, 100).unwrap();
        }
        avl.add(1, 0).unwrap();
        println!("{:#?}", &avl);
        avl.delete(&1).unwrap();
        println!("{:#?}", &avl);
    }
    
    #[test]
    fn deletion_interrupted_index_propagation() { 
        let mut avl = Map::<u64,u64>::new();
        
        for elem in 4+0..4+31 {
            avl.add(elem*2, 100).unwrap();
        }
        avl.add(1, 0).unwrap();
        avl.add(13, 0).unwrap();
        println!("{:#?}", &avl);
        avl.delete(&1).unwrap();
        println!("{:#?}", &avl);
    }
    
    #[test]
    fn double_insert() {
        let mut avl = Map::<u64,u64>::new();
        for elem in 0..7 {
            avl.add(elem, 7-elem).unwrap();
        }
        let hola = avl.add(2, 12).unwrap_err();
        println!("{:#?}", hola);
    }

    #[test]
    fn find() { 
        let mut avl = Map::<u64,u64>::new();
        for elem in 0..7 {
            avl.add(elem, 7-elem).unwrap();
        }
        println!("{:#?}", &avl);
        avl.get(&2).unwrap();
        avl.get(&13).unwrap_err();
    }
    
    #[test]
    fn creation() { 
        let mut avl0 = Map::<u64,u64>::new();
        let mut avl1 = Map::<u64,u64>::new();
        for elem in 0..7 {
            avl0.add(elem, 6-elem).unwrap();
        }
        for elem in 0..7 {
            avl1.add(6-elem, elem).unwrap();
        }
        println!("{:#?}", &avl0);
        println!("{:#?}", &avl1);
    }

    #[test]
    fn empty() {
        let mut avl = Map::<u64,u64>::new();
        for elem in 4+0..4+7+5 {
            avl.add(elem, 0).unwrap();
        }
        println!("{:#?}", &avl);
        assert_eq!(avl.len(), 12);
        avl.empty();
        println!("{:#?}", &avl);
        assert_eq!(avl.len(), 0);
    }
    
    #[test]
    fn drop() {
        let mut avl = Map::<u64,u64>::new();
        
        for elem in 4+0..4+7+5 {
            avl.add(elem, 0).unwrap();
        }
        
    }
    
}