2021-11-02 20:05:26 -07:00
|
|
|
mod str_lib_tests {
|
2022-01-16 22:02:40 -08:00
|
|
|
use relish::ast::{eval, lex, Ctr, FTable, VTable};
|
|
|
|
|
use relish::stdlib::get_stdlib;
|
2021-11-02 20:05:26 -07:00
|
|
|
use std::cell::RefCell;
|
2022-01-16 22:02:40 -08:00
|
|
|
use std::rc::Rc;
|
2021-11-02 20:05:26 -07:00
|
|
|
|
|
|
|
|
#[test]
|
2021-11-06 15:43:42 -07:00
|
|
|
fn test_simple_concat() {
|
2021-11-03 23:42:59 -07:00
|
|
|
let document = "(concat 'test')";
|
|
|
|
|
let result = "test";
|
2021-11-02 20:05:26 -07:00
|
|
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
|
|
|
|
let ft: Rc<RefCell<FTable>>;
|
2021-11-07 22:04:57 -08:00
|
|
|
match get_stdlib(vt.clone()) {
|
2021-11-02 20:05:26 -07:00
|
|
|
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);
|
2022-01-16 22:02:40 -08:00
|
|
|
}
|
2021-11-02 20:05:26 -07:00
|
|
|
|
2022-01-16 22:02:40 -08:00
|
|
|
Ok(tree) => match eval(tree, vt.clone(), ft.clone(), false) {
|
|
|
|
|
Err(s) => {
|
|
|
|
|
println!("Couldnt eval {}: {}\n", document, s);
|
|
|
|
|
assert!(false);
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
2022-01-16 22:02:40 -08:00
|
|
|
|
|
|
|
|
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),
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
2021-11-06 15:43:42 -07:00
|
|
|
fn test_poly_concat() {
|
2021-11-03 23:42:59 -07:00
|
|
|
let document = "(concat 'test' 1 2 3)";
|
|
|
|
|
let result = "test123";
|
2021-11-02 20:05:26 -07:00
|
|
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
|
|
|
|
let ft: Rc<RefCell<FTable>>;
|
2021-11-07 22:04:57 -08:00
|
|
|
match get_stdlib(vt.clone()) {
|
2021-11-02 20:05:26 -07:00
|
|
|
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);
|
2022-01-16 22:02:40 -08:00
|
|
|
}
|
2021-11-02 20:05:26 -07:00
|
|
|
|
2022-01-16 22:02:40 -08:00
|
|
|
Ok(tree) => match eval(tree, vt.clone(), ft.clone(), false) {
|
|
|
|
|
Err(s) => {
|
|
|
|
|
println!("Couldnt eval {}: {}\n", document, s);
|
|
|
|
|
assert!(false);
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
2022-01-16 22:02:40 -08:00
|
|
|
|
|
|
|
|
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),
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
2021-11-06 15:43:42 -07:00
|
|
|
fn test_empty_concat() {
|
2021-11-03 23:42:59 -07:00
|
|
|
let document = "(concat)";
|
|
|
|
|
let result = "";
|
2021-11-02 20:05:26 -07:00
|
|
|
let vt = Rc::new(RefCell::new(VTable::new()));
|
|
|
|
|
let ft: Rc<RefCell<FTable>>;
|
2021-11-07 22:04:57 -08:00
|
|
|
match get_stdlib(vt.clone()) {
|
2021-11-02 20:05:26 -07:00
|
|
|
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);
|
2022-01-16 22:02:40 -08:00
|
|
|
}
|
2021-11-02 20:05:26 -07:00
|
|
|
|
2022-01-16 22:02:40 -08:00
|
|
|
Ok(tree) => match eval(tree, vt.clone(), ft.clone(), false) {
|
|
|
|
|
Err(s) => {
|
|
|
|
|
println!("Couldnt eval {}: {}\n", document, s);
|
|
|
|
|
assert!(false);
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
2022-01-16 22:02:40 -08:00
|
|
|
|
|
|
|
|
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),
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-11-02 20:05:26 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|