underscore 0.0.2

utility library for rust. Inspired by underscore.js.
extern crate underscore;

use underscore::vec::VecU;
use underscore::hashmap::HashMapU;
use underscore::btreemap::BTreeMapU;
use std::collections::HashMap;
use std::collections::BTreeMap;

#[test]
fn test_vec_first() {
    let v = vec!(1i, 2, 3);
    assert_eq!(1i, *v.first().unwrap());
}

#[test]
fn test_vec_without() {
    let v = vec!(1i, 2, 2);
    for x in v.without(&vec!(1i)).iter() {
        assert_eq!(2i, *x);
    }
}

#[test]
fn test_vec_intersection() {
    let v = vec!(1i, 2, 3);
    assert_eq!(vec!(2i, 3), v.intersection(&vec!(2i, 3)));
}

#[test]
fn test_vec_uniq() {
    let v = vec!(0u, 1, 1, 2, 2, 3);
    assert_eq!(vec!(0u, 1, 2, 3), v.uniq());
}

#[test]
fn test_vec_index_of() {
    assert_eq!(2u, vec!(3i, 2, 1).index_of(&1i).unwrap());
    assert_eq!(None, vec!(3i, 2, 1).index_of(&4i));
}

#[test]
fn test_vec_last_index_of() {
    assert_eq!(3u, vec!(1i, 2, 3, 1).last_index_of(&1i).unwrap());
    assert_eq!(0u, vec!(1i, 2, 3).last_index_of(&1i).unwrap());
    assert_eq!(None, vec!(3i, 2, 1).last_index_of(&4i));
}

#[test]
fn test_vec_object() {
    let obj = vec!(0u, 1, 2, 3).object(vec!(0i, 1, 2, 3));

    for key in range(0u, obj.len()) {
        match obj.get(&key) {
            Some(value) => assert_eq!(*value as uint, key),
            None => assert!(false),
        }
    }
}

#[test]
fn test_vec_reject() {
    let rejected = vec!(1i, 2, 10).reject(|&v| v < 10);
    assert_eq!(vec!(10i), rejected);
}

#[test]
fn test_hashmap_invert() {
    let mut sample = HashMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let inverted = sample.invert();

    for x in vec!(1u, 2).iter() {
        assert!(inverted.contains_key(x));
        assert_eq!(*x as int, inverted[*x]);
    }
}

#[test]
fn test_hashmap_pick() {
    let mut sample = HashMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let picked = sample.pick(vec!(1i));

    for key in picked.keys() {
        assert_eq!(1u, picked[*key]);
    }
}

#[allow(unused_variables)]
fn sample_filter(x: &int, y: &uint) -> bool {
    if *x == 1 { return true; }
    return false;
}

#[test]
fn test_hashmap_pick_by_filter() {
    let mut sample = HashMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let picked = sample.pick_by_filter(sample_filter);

    for key in picked.keys() {
        assert_eq!(1u, picked[*key]);
    }
}

#[test]
fn test_hashmap_omit() {
    let mut sample = HashMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let omitted = sample.omit(vec!(1i));

    for key in omitted.keys() {
        assert_eq!(2u, omitted[*key]);
    }
}

#[test]
fn test_hashmap_omit_by_filter() {
    let mut sample = HashMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let omitted = sample.omit_by_filter(sample_filter);

    let mut expected = HashMap::new();
    expected.insert(2i, 2u);
    assert_eq!(expected, omitted);
}

#[test]
fn test_hashmap_defaults() {
    let mut origin = HashMap::new();
    origin.insert(1i, 1u);
    origin.insert(2i, 2u);

    let mut appends = HashMap::new();
    appends.insert(1i, 10000u);
    appends.insert(3i, 3u);

    let defaults = origin.defaults(appends);
    for x in vec!(1i, 2, 3).iter() {
        assert!(defaults.contains_key(x));
        assert_eq!(*x as uint, *defaults.get(x).unwrap());
    }
}

#[test]
fn test_treemap_invert() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let inverted = sample.invert();

    for x in vec!(1u, 2).iter() {
        assert!(inverted.contains_key(x));
        assert_eq!(*x as int, *inverted.get(x).unwrap());
    }
}

#[test]
fn test_treemap_pick() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let v = vec!(1i);
    let picked = sample.pick(&v);

    assert_eq!(1u, picked.len());
    assert_eq!(1u, *picked.get(&1i).unwrap());
}

#[test]
fn test_treemap_pick_by_filter() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let picked = sample.pick_by_filter(sample_filter);

    assert_eq!(1u, picked.len());
    assert_eq!(1u, *picked.get(&1i).unwrap());
}

#[test]
fn test_treemap_omit() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let omitted = sample.omit(&vec!(1i));

    assert_eq!(1u, omitted.len());
    assert_eq!(2u, *omitted.get(&2i).unwrap());
}

#[test]
fn test_treemap_omit_by_filter() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    let omitted = sample.omit_by_filter(sample_filter);

    assert_eq!(1u, omitted.len());
    assert_eq!(2u, *omitted.get(&2i).unwrap());
}

#[test]
fn test_treemap_defaults() {
    let mut origin = BTreeMap::new();
    origin.insert(1i, 1u);
    origin.insert(2i, 2u);

    let mut appends = BTreeMap::new();
    appends.insert(1i, 10000u);
    appends.insert(3i, 3u);

    let defaults = origin.defaults(appends);
    for x in vec!(1i, 2, 3).iter() {
        assert!(defaults.contains_key(x));
        assert_eq!(*x as uint, *defaults.get(x).unwrap());
    }
}

#[test]
#[allow(deprecated)]
fn test_treemap_pairs() {
    let mut sample = BTreeMap::new();
    sample.insert(1i, 1u);
    sample.insert(2i, 2u);
    sample.insert(3i, 3u);
    let pairs = sample.pairs();

    assert_eq!(3u, pairs.len());
    assert_eq!(1i, *pairs[0].val0());
    assert_eq!(1u, *pairs[0].val1());
}