75 lines
1.6 KiB
Rust
75 lines
1.6 KiB
Rust
use fix::value::{List, Value};
|
|
|
|
use crate::utils::{eval, eval_result};
|
|
|
|
#[test_log::test]
|
|
fn true_literal() {
|
|
assert_eq!(eval("true"), Value::Bool(true));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn false_literal() {
|
|
assert_eq!(eval("false"), Value::Bool(false));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn null_literal() {
|
|
assert_eq!(eval("null"), Value::Null);
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn map_function() {
|
|
assert_eq!(
|
|
eval("map (x: x * 2) [1 2 3]"),
|
|
Value::List(List::new(vec![Value::Int(2), Value::Int(4), Value::Int(6)]))
|
|
);
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn is_null_function() {
|
|
assert_eq!(eval("isNull null"), Value::Bool(true));
|
|
assert_eq!(eval("isNull 5"), Value::Bool(false));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn shadow_true() {
|
|
assert_eq!(eval("let true = false; in true"), Value::Bool(false));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn shadow_map() {
|
|
assert_eq!(eval("let map = x: y: x; in map 1 2"), Value::Int(1));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn mixed_usage() {
|
|
assert_eq!(
|
|
eval("if true then map (x: x + 1) [1 2] else []"),
|
|
Value::List(List::new(vec![Value::Int(2), Value::Int(3)]))
|
|
);
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn in_let_bindings() {
|
|
assert_eq!(
|
|
eval("let x = true; y = false; in x && y"),
|
|
Value::Bool(false)
|
|
);
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn shadow_in_function() {
|
|
assert_eq!(eval("(true: true) false"), Value::Bool(false));
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn throw_function() {
|
|
let result = eval_result("throw \"error message\"");
|
|
assert!(result.is_err());
|
|
}
|
|
|
|
#[test_log::test]
|
|
fn to_string_function() {
|
|
assert_eq!(eval("toString 42"), Value::String("42".to_string()));
|
|
}
|