split lib tests into many files, add append tests
This commit is contained in:
parent
b41b52e112
commit
62ff86df32
3 changed files with 496 additions and 94 deletions
182
tests/test_lib_append.rs
Normal file
182
tests/test_lib_append.rs
Normal file
|
|
@ -0,0 +1,182 @@
|
||||||
|
mod append_lib_tests {
|
||||||
|
use relish::stdlib::{get_stdlib};
|
||||||
|
use relish::ast::{lex, eval, ast_to_string, VTable, FTable, Ctr};
|
||||||
|
use std::rc::Rc;
|
||||||
|
use std::cell::RefCell;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_to_empty_list() {
|
||||||
|
let document = "(append () 1 2 3)";
|
||||||
|
let result = "(1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_to_full_list() {
|
||||||
|
let document = "(append (1 2) 3)";
|
||||||
|
let result = "(1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mono_append() {
|
||||||
|
let document = "(append)";
|
||||||
|
let result = "()";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_no_list() {
|
||||||
|
let document = "(append 'test' 1 2 3)";
|
||||||
|
let result = "('test' 1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,94 +0,0 @@
|
||||||
mod lib_func_tests {
|
|
||||||
use relish::stdlib::{get_stdlib};
|
|
||||||
use relish::ast::{lex, eval, VTable, FTable, Ctr};
|
|
||||||
use std::rc::Rc;
|
|
||||||
use std::cell::RefCell;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_simple_echo() {
|
|
||||||
let document = "(echo 'test')";
|
|
||||||
let result = "test\n";
|
|
||||||
let vt = Rc::new(RefCell::new(VTable::new()));
|
|
||||||
let ft: Rc<RefCell<FTable>>;
|
|
||||||
match get_stdlib() {
|
|
||||||
Ok(f) => ft = f,
|
|
||||||
Err(s) => {
|
|
||||||
ft = Rc::new(RefCell::new(FTable::new()));
|
|
||||||
println!("Couldnt get stdlib: {}!", s);
|
|
||||||
assert!(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
match lex(document.to_string()) {
|
|
||||||
Err(s) => {
|
|
||||||
println!("Couldnt lex {}: {}\n", document, s);
|
|
||||||
assert!(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
Ok(tree) => {
|
|
||||||
match eval(tree, vt.clone(), ft.clone(), false) {
|
|
||||||
Err(s) => {
|
|
||||||
println!("Couldnt eval {}: {}\n", document, s);
|
|
||||||
assert!(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
Ok(ctr) => {
|
|
||||||
match ctr {
|
|
||||||
Ctr::Symbol(_) => assert!(false),
|
|
||||||
Ctr::String(s) => assert_eq!(s, result),
|
|
||||||
Ctr::Integer(_) => assert!(false),
|
|
||||||
Ctr::Float(_) => assert!(false),
|
|
||||||
Ctr::Bool(_) => assert!(false),
|
|
||||||
Ctr::Seg(_) => assert!(false),
|
|
||||||
Ctr::None => assert!(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_poly_echo() {
|
|
||||||
let document = "(echo 'test' 1 2 3)";
|
|
||||||
let result = "test\n1\n2\n3\n";
|
|
||||||
let vt = Rc::new(RefCell::new(VTable::new()));
|
|
||||||
let ft: Rc<RefCell<FTable>>;
|
|
||||||
match get_stdlib() {
|
|
||||||
Ok(f) => ft = f,
|
|
||||||
Err(s) => {
|
|
||||||
ft = Rc::new(RefCell::new(FTable::new()));
|
|
||||||
println!("Couldnt get stdlib: {}!", s);
|
|
||||||
assert!(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
match lex(document.to_string()) {
|
|
||||||
Err(s) => {
|
|
||||||
println!("Couldnt lex {}: {}\n", document, s);
|
|
||||||
assert!(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
Ok(tree) => {
|
|
||||||
match eval(tree, vt.clone(), ft.clone(), false) {
|
|
||||||
Err(s) => {
|
|
||||||
println!("Couldnt eval {}: {}\n", document, s);
|
|
||||||
assert!(false);
|
|
||||||
},
|
|
||||||
|
|
||||||
Ok(ctr) => {
|
|
||||||
match ctr {
|
|
||||||
Ctr::Symbol(_) => assert!(false),
|
|
||||||
Ctr::String(s) => assert_eq!(s, result),
|
|
||||||
Ctr::Integer(_) => assert!(false),
|
|
||||||
Ctr::Float(_) => assert!(false),
|
|
||||||
Ctr::Bool(_) => assert!(false),
|
|
||||||
Ctr::Seg(_) => assert!(false),
|
|
||||||
Ctr::None => assert!(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
314
tests/test_lib_str.rs
Normal file
314
tests/test_lib_str.rs
Normal file
|
|
@ -0,0 +1,314 @@
|
||||||
|
mod str_lib_tests {
|
||||||
|
use relish::stdlib::{get_stdlib};
|
||||||
|
use relish::ast::{lex, eval, ast_to_string, VTable, FTable, Ctr};
|
||||||
|
use std::rc::Rc;
|
||||||
|
use std::cell::RefCell;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_simple_echo() {
|
||||||
|
let document = "(echo 'test')";
|
||||||
|
let result = "test\n";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(s) => assert_eq!(s, result),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(_) => assert!(false),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_poly_echo() {
|
||||||
|
let document = "(echo 'test' 1 2 3)";
|
||||||
|
let result = "test\n1\n2\n3\n";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(s) => assert_eq!(s, result),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(_) => assert!(false),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_empty_echo() {
|
||||||
|
let document = "(echo)";
|
||||||
|
let result = "\n";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(s) => assert_eq!(s, result),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(_) => assert!(false),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_to_empty_list() {
|
||||||
|
let document = "(append () 1 2 3)";
|
||||||
|
let result = "(1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_to_full_list() {
|
||||||
|
let document = "(append (1 2) 3)";
|
||||||
|
let result = "(1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mono_append() {
|
||||||
|
let document = "(append)";
|
||||||
|
let result = "()";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_append_no_list() {
|
||||||
|
let document = "(append 'test' 1 2 3)";
|
||||||
|
let result = "('test' 1 2 3)";
|
||||||
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
||||||
|
let ft: Rc<RefCell<FTable>>;
|
||||||
|
match get_stdlib() {
|
||||||
|
Ok(f) => ft = f,
|
||||||
|
Err(s) => {
|
||||||
|
ft = Rc::new(RefCell::new(FTable::new()));
|
||||||
|
println!("Couldnt get stdlib: {}!", s);
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match lex(document.to_string()) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt lex {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(tree) => {
|
||||||
|
match eval(tree, vt.clone(), ft.clone(), false) {
|
||||||
|
Err(s) => {
|
||||||
|
println!("Couldnt eval {}: {}\n", document, s);
|
||||||
|
assert!(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
Ok(ctr) => {
|
||||||
|
match ctr {
|
||||||
|
Ctr::Symbol(_) => assert!(false),
|
||||||
|
Ctr::String(_) => assert!(false),
|
||||||
|
Ctr::Integer(_) => assert!(false),
|
||||||
|
Ctr::Float(_) => assert!(false),
|
||||||
|
Ctr::Bool(_) => assert!(false),
|
||||||
|
Ctr::Seg(s) => assert_eq!(ast_to_string(s), result),
|
||||||
|
Ctr::None => assert!(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue