nyavascript 0.1.0

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

#[test]
pub fn pipe_with_no_args_returns_nil() {
    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
    ]);

    let expected =  SXRef::nil();

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn pipe_returns_result_of_only_arg_when_arg_is_atom() {
    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
        SXRef::number(1),
    ]);

    let expected = SXRef::number(1);

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual);

    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
        SXRef::string("foo".into()),
    ]);

    let expected = SXRef::string("foo".into());

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual);

    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
        SXRef::symbol("foo".into()),
    ]);

    let expected = SXRef::nil();

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual);

    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
        SXRef::quote(SXRef::symbol("foo".into())),
    ]);

    let expected = SXRef::symbol("foo".into());

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual);
}

#[test]
pub fn pipe_works() {
    let subject = SXRef::from(vec![
        SXRef::symbol("|>".into()),
        SXRef::quote(SXRef::from(vec![
            SXRef::number(1),
            SXRef::number(2),
        ])),
        SXRef::from(vec![
            SXRef::symbol("car".into()),
        ]),
    ]);

    let expected =  SXRef::number(1);

    let actual = FunScope::pipe(subject, &mut env()).unwrap();

    assert_eq!(expected, actual)
}