nyavascript 0.1.0

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

#[test]
pub fn atom_returns_1_when_called_on_nil() {
    let mut env = Env::new();

    let subject = vec![SXRef::nil()];

    let expected = SXRef::number(1);

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_1_when_called_on_symbol() {
    let mut env = Env::new();

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

    let expected = SXRef::number(1);

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_1_when_called_on_number() {
    let mut env = Env::new();

    let subject = vec![SXRef::number(1)];

    let expected = SXRef::number(1);

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_1_when_called_on_string() {
    let mut env = Env::new();

    let subject = vec![SXRef::string("foo".into())];

    let expected = SXRef::number(1);

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_list() {
    let mut env = Env::new();

    let subject = vec![
        SXRef::from(vec![
            SXRef::number(1),
            SXRef::number(1),
        ])
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_quote() {
    let mut env = Env::new();

    let subject = vec![
        SXRef::quote(SXRef::number(1)),
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_function() {
    let mut env = Env::new();

    let subject = vec![
        SXRef::function("()".try_into().unwrap()),
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_macro() {
    let mut env = Env::new();

    let subject = vec![
        SXRef::r#macro("()".try_into().unwrap()),
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_rust_lambda() {
    let mut env = Env::new();

    let subject = vec![
        RustFunction::new(dummy_fn).into(),
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}

#[test]
pub fn atom_returns_nil_when_called_on_rust_macro() {
    let mut env = Env::new();

    let subject = vec![
        SXRef::r#macro(RustMacro::new(dummy_macro).into()),
    ];

    let expected = SXRef::nil();

    let actual = McCarthyScope::atom(subject, &mut env).unwrap();

    assert_eq!(expected, actual)
}