use crate::eval::environment::Environment;
use crate::eval::evaluator::eval;
use crate::value::Value;
use hamelin_lib::tree::builder::{and, or, ExpressionBuilder};
use hamelin_lib::tree::options::ExpressionTypeCheckOptions;
use hamelin_lib::type_check_expression;
#[test]
fn test_eval_boolean_operators() {
let env = Environment::new();
let expr = type_check_expression(
and(true, false).build(),
ExpressionTypeCheckOptions::default(),
)
.output;
let result = eval(&expr, &env).unwrap();
assert_eq!(result, Value::Boolean(false));
let expr = type_check_expression(
or(true, false).build(),
ExpressionTypeCheckOptions::default(),
)
.output;
let result = eval(&expr, &env).unwrap();
assert_eq!(result, Value::Boolean(true));
let expr = type_check_expression(
and(true, true).build(),
ExpressionTypeCheckOptions::default(),
)
.output;
let result = eval(&expr, &env).unwrap();
assert_eq!(result, Value::Boolean(true));
let expr = type_check_expression(
or(false, false).build(),
ExpressionTypeCheckOptions::default(),
)
.output;
let result = eval(&expr, &env).unwrap();
assert_eq!(result, Value::Boolean(false));
}