mirror of
https://github.com/teo3300/rust-mal.git
synced 2026-01-12 01:05:32 +01:00
Ok, maybe I should run Cargo fmt BEFORE
Signed-off-by: teo3300 <matteo.rogora@live.it>
This commit is contained in:
@ -30,8 +30,8 @@ macro_rules! env_init {
|
||||
}
|
||||
|
||||
use crate::printer::prt;
|
||||
use crate::types::{mal_comp, mal_assert};
|
||||
use crate::types::MalType::{Bool, Fun, Int, List, Nil, Str};
|
||||
use crate::types::{mal_assert, mal_comp};
|
||||
|
||||
pub fn ns_init() -> Env {
|
||||
env_init!(None,
|
||||
|
||||
49
src/eval.rs
49
src/eval.rs
@ -201,8 +201,8 @@ mod tests {
|
||||
mod forms {
|
||||
|
||||
use crate::env::env_get;
|
||||
use crate::eval::{def_bang_form, let_star_form, do_form};
|
||||
use crate::eval::tests::_env_empty;
|
||||
use crate::eval::{def_bang_form, do_form, let_star_form};
|
||||
use crate::types::MalType;
|
||||
|
||||
#[test]
|
||||
@ -239,25 +239,52 @@ mod tests {
|
||||
#[test]
|
||||
fn let_star() {
|
||||
let env = _env_empty();
|
||||
assert!(matches!(let_star_form(load!("(let*)"), env.clone()), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(let_star_form(load!("(let* 1)"), env.clone()), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(let_star_form(load!("(let* (a))"), env.clone()), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(let_star_form(load!("(let* ())"), env.clone()), Ok(MalType::Nil)));
|
||||
assert!(matches!(let_star_form(load!("(let* (a 1))"), env.clone()), Ok(MalType::Nil)));
|
||||
assert!(
|
||||
matches!(let_star_form(load!("(let*)"), env.clone()), Err(e) if !e.is_recoverable())
|
||||
);
|
||||
assert!(
|
||||
matches!(let_star_form(load!("(let* 1)"), env.clone()), Err(e) if !e.is_recoverable())
|
||||
);
|
||||
assert!(
|
||||
matches!(let_star_form(load!("(let* (a))"), env.clone()), Err(e) if !e.is_recoverable())
|
||||
);
|
||||
assert!(matches!(
|
||||
let_star_form(load!("(let* ())"), env.clone()),
|
||||
Ok(MalType::Nil)
|
||||
));
|
||||
assert!(matches!(
|
||||
let_star_form(load!("(let* (a 1))"), env.clone()),
|
||||
Ok(MalType::Nil)
|
||||
));
|
||||
assert!(matches!(env_get(&env.clone(), "a"), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(let_star_form(load!("(let* (a 1 b 2) a b)"), env.clone()), Ok(MalType::Int(2))));
|
||||
assert!(matches!(
|
||||
let_star_form(load!("(let* (a 1 b 2) a b)"), env.clone()),
|
||||
Ok(MalType::Int(2))
|
||||
));
|
||||
assert!(matches!(env_get(&env.clone(), "a"), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(env_get(&env.clone(), "b"), Err(e) if !e.is_recoverable()));
|
||||
assert!(matches!(let_star_form(load!("(let* (a 1 b 2) (def! c 1) a b)"), env.clone()), Ok(MalType::Int(2))));
|
||||
assert!(matches!(
|
||||
let_star_form(load!("(let* (a 1 b 2) (def! c 1) a b)"), env.clone()),
|
||||
Ok(MalType::Int(2))
|
||||
));
|
||||
assert!(matches!(env_get(&env.clone(), "c"), Err(e) if !e.is_recoverable()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn _do() {
|
||||
let env = _env_empty();
|
||||
assert!(matches!(do_form(load!("(do)"), env.clone()), Ok(MalType::Nil)));
|
||||
assert!(matches!(do_form(load!("(do true)"), env.clone()), Ok(MalType::Bool(true))));
|
||||
assert!(matches!(do_form(load!("(do (def! a 1) 2)"), env.clone()), Ok(MalType::Int(2))));
|
||||
assert!(matches!(
|
||||
do_form(load!("(do)"), env.clone()),
|
||||
Ok(MalType::Nil)
|
||||
));
|
||||
assert!(matches!(
|
||||
do_form(load!("(do true)"), env.clone()),
|
||||
Ok(MalType::Bool(true))
|
||||
));
|
||||
assert!(matches!(
|
||||
do_form(load!("(do (def! a 1) 2)"), env.clone()),
|
||||
Ok(MalType::Int(2))
|
||||
));
|
||||
assert!(matches!(env_get(&env.clone(), "a"), Ok(MalType::Int(1))));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,19 +1,17 @@
|
||||
#[cfg(test)]
|
||||
mod functional {
|
||||
mod functional {
|
||||
macro_rules! test {
|
||||
($file:expr) => {
|
||||
{
|
||||
use crate::core::ns_init;
|
||||
use crate::load_file;
|
||||
let env = ns_init();
|
||||
load_file("core.mal", &env);
|
||||
load_file(format!("tests/{}.mal", $file).as_str(), &env);
|
||||
}
|
||||
};
|
||||
($file:expr) => {{
|
||||
use crate::core::ns_init;
|
||||
use crate::load_file;
|
||||
let env = ns_init();
|
||||
load_file("core.mal", &env);
|
||||
load_file(format!("tests/{}.mal", $file).as_str(), &env);
|
||||
}};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fibonacci() {
|
||||
test!("fibonacci");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ pub fn mal_comp(args: &[MalType]) -> MalRet {
|
||||
pub fn mal_assert(args: &[MalType]) -> MalRet {
|
||||
args.iter().for_each(|i| match i {
|
||||
M::Nil | M::Bool(false) => panic!(),
|
||||
_ => ()
|
||||
_ => (),
|
||||
});
|
||||
Ok(M::Nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user