mutcrab 0.1.1

This is a library written in rust that contains various classic data structures
Documentation
use mutcrab::collection::map::{HashMap, Map};

#[test]
fn my_map2_test() {

    let mut map = HashMap::<i32, i32>::of(1, 2);
    map.put(2, 3);
    let v: &i32 = map.get(&1).unwrap();
    assert_eq!(2, *v);
    assert_eq!(map.get(&1), Some(&2));
    assert_eq!(map.remove(&2), Some(3));
    assert_eq!(map.get(&2), None);
    assert_eq!(map.put(1, 2), Some(2));
    map.put(2, 3);
    map.put(3, 4);
    assert_eq!(map.size(), 3);
    map.foreach(|k, v| {
        println!("forache key {} value is {}", *k, *v);
    });
}

#[test]
fn hashmap_test() {
    let mut map = HashMap::<&str, bool>::new();
    map.insert("a", true);
    map.insert("b", false);
    map.insert("c", false);
    map.insert("d", false);
    assert_eq!(map.len(), 4);
    map.foreach(|k, v| {
        println!("hashmap key {} value is {}", *k, *v);
    });
    assert_eq!(map.get(&"a"), Some(&true));
    assert_eq!(map.get(&"b"), Some(&false));
    assert_eq!(map.get(&"c"), Some(&false));
    assert_eq!(map.get(&"d"), Some(&false));
    assert_eq!(map.contains_key(&"a"), true);
}

#[test]
fn remove_test() {
    let mut map = HashMap::<&str, i32>::new();
    map.insert("a", 1);
    map.insert("b", 2);
    map.insert("c", 3);
    map.insert("d", 4);
    assert_eq!(map.len(), 4);
    assert_eq!(map.remove(&"a"), Some(1));
    assert_eq!(map.len(), 3);
    assert_eq!(map.remove(&"b"), Some(2));
    assert_eq!(map.len(), 2);
    assert_eq!(map.remove(&"c"), Some(3));
    assert_eq!(map.len(), 1);
    assert_eq!(map.remove(&"d"), Some(4));
    assert_eq!(map.len(), 0);
}

#[test]
fn entry_get_test() {
    let mut map = HashMap::<&str, i32>::new();
    map.insert("a", 1);
    map.insert("b", 2);
    map.insert("c", 1);
    map.insert("d", 1);
    assert_eq!(map.len(), 4);
    let entry = map.entry("a");
    assert_eq!(*entry.key(), "a");

    assert_eq!(map.entry("a").take_insert(2), Some(1));
    assert_eq!(map.get(&"a"), Some(&2));
    assert_eq!(*map.entry("a").or_insert(2), 2);

    let v = map.entry("b").and_modify(|x| *x = *x * 10 + 2).value();
    assert_eq!(*v, 22);
}


#[test]
fn entry_insert_test() {
    let mut map = HashMap::<&str, i32>::new();
    map.entry("a").or_insert(1);
    map.entry("b").and_modify(|x| *x = 2).value();
    assert_eq!(map.get(&"a"), Some(&1));
    assert_eq!(map.get(&"b"), Some(&2));
}

#[test]
fn map_iterator_test() {
    let mut map = HashMap::<&str, i32>::new();
    map.put("a", 1);
    map.put("b", 2);
    map.put("c", 3);
    map.put("d", 4);

    for (k, v) in &map {
        println!("map iterator key {} value is {}", *k, *v);
    }

    map.iter().for_each(|(k, v)| {
        println!("map iterator key {} value is {}", *k, *v);
    });

    let key_list: Vec<_> = map.iter().map(|(k, _)| {*k}).collect();
    println!("key list: {:?}", key_list);
    let value_list: Vec<_> = map.iter().map(|(_, v)| {*v}).collect();
    println!("value list: {:?}", value_list);
}