nyavascript 0.1.0

Lisp implementation. Called NyavaScript because I'm a monster
Documentation
use super::SExpressionRef as SXRef;

#[test]
pub fn iter_works() {
    let sx = SXRef::from(vec![
        SXRef::number(1),
        SXRef::number(2),
        SXRef::number(3),
    ]);

    let mut it = sx.iter();

    assert_eq!(Some(SXRef::number(1)), it.next());
    assert_eq!(Some(SXRef::number(2)), it.next());
    assert_eq!(Some(SXRef::number(3)), it.next());
    assert_eq!(None, it.next());
}

#[test]
pub fn iter_on_non_list() {
    let sx = SXRef::number(3);

    let mut it = sx.iter();

    assert_eq!(None, it.next());
}

#[test]
pub fn len_works_on_list() {
    let sx = SXRef::from(vec![
        SXRef::number(1),
        SXRef::number(2),
        SXRef::number(3),
    ]);

    assert_eq!(sx.len(), 3);
}

#[test]
pub fn len_works_on_non_list() {
    let sx = SXRef::number(3);

    assert_eq!(sx.len(), 0);
}

#[test]
pub fn sxref_from_empty_list_is_nil() {
    let subject: Vec<SXRef> = Vec::new();

    let expected = SXRef::nil();

    let actual = SXRef::from(subject);

    assert_eq!(expected, actual);
}

#[test]
fn from_iter_returns_args_in_correct_order() {
    let subject = SXRef::from(vec![
        SXRef::number(1),
        SXRef::number(2),
        SXRef::number(3),
    ]);

    let expected = SXRef::from(vec![
        SXRef::number(1),
        SXRef::number(2),
        SXRef::number(3),
    ]);

    let actual = subject.iter().collect();

    assert_eq!(expected, actual);
}