2023-03-08 11:39:54 -08:00
|
|
|
mod str_lib_tests {
|
|
|
|
|
use relish::ast::{eval, lex, SymTable};
|
|
|
|
|
use relish::stdlib::{dynamic_stdlib, static_stdlib};
|
2023-02-27 17:30:49 -08:00
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_simple_concat() {
|
|
|
|
|
let document = "(concat 'test')";
|
2023-03-08 11:39:54 -08:00
|
|
|
let result = "'test'";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_poly_concat() {
|
|
|
|
|
let document = "(concat 'test' 1 2 3)";
|
|
|
|
|
let result = "'test123'";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_empty_concat() {
|
|
|
|
|
let document = "(concat)";
|
|
|
|
|
let result = "''";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_strlen_str() {
|
|
|
|
|
let document = "(strlen 'test')";
|
|
|
|
|
let result = 4;
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
2023-02-27 17:30:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
2023-03-08 11:39:54 -08:00
|
|
|
fn test_strlen_int() {
|
|
|
|
|
let document = "(strlen 1000)";
|
|
|
|
|
let result = 4;
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_strlen_float() {
|
|
|
|
|
let document = "(strlen 10.2)";
|
|
|
|
|
let result = 4;
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_strlen_seg() {
|
|
|
|
|
let document = "(strlen (1 2 3))";
|
|
|
|
|
let result = 7;
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_strlen_bool() {
|
|
|
|
|
let document = "(strlen true)";
|
|
|
|
|
let result = 4;
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
2023-02-27 17:30:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
2023-03-08 11:39:54 -08:00
|
|
|
fn test_strcast_i() {
|
|
|
|
|
let document = "(string 4)";
|
|
|
|
|
let result = "'4'";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_strcast_seg() {
|
|
|
|
|
let document = "(string (1 2 3))";
|
|
|
|
|
let result = "'(1 2 3)'";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_contains() {
|
2023-03-20 22:03:10 -07:00
|
|
|
let document = "(substr? 'bigger' 'ger')";
|
2023-03-08 11:39:54 -08:00
|
|
|
let result = "true";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
|
2023-03-08 11:39:54 -08:00
|
|
|
#[test]
|
|
|
|
|
fn test_doesnt_contain() {
|
2023-03-20 22:03:10 -07:00
|
|
|
let document = "(substr? 'smaller' 'ger')";
|
2023-03-08 11:39:54 -08:00
|
|
|
let result = "false";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 11:39:54 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
2023-02-27 17:30:49 -08:00
|
|
|
}
|
2023-03-08 19:42:08 -08:00
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_split() {
|
|
|
|
|
let document = "(split 'one.two.three' '.')";
|
|
|
|
|
let result = "('one' 'two' 'three')";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 19:42:08 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_split_big_delim() {
|
|
|
|
|
let document = "(split 'one:d:two:d:three' ':d:')";
|
|
|
|
|
let result = "('one' 'two' 'three')";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 19:42:08 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_splitnt() {
|
|
|
|
|
let document = "(split 'one.two.three' '-')";
|
|
|
|
|
let result = "('one.two.three')";
|
|
|
|
|
let mut syms = SymTable::new();
|
|
|
|
|
static_stdlib(&mut syms).unwrap();
|
2023-03-24 18:14:33 -07:00
|
|
|
dynamic_stdlib(&mut syms, None).unwrap();
|
2023-03-08 19:42:08 -08:00
|
|
|
assert_eq!(
|
|
|
|
|
*eval(&lex(&document.to_string()).unwrap(), &mut syms)
|
|
|
|
|
.unwrap()
|
|
|
|
|
.to_string(),
|
|
|
|
|
result.to_string(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-02-27 17:30:49 -08:00
|
|
|
}
|