Lines
98.78 %
Functions
100 %
Branches
use nms::interpreter::Interpreter;
use scripting::nomiscript::{Fraction, Value};
#[test]
fn test_eval_nil() {
let mut interp = Interpreter::new(false).unwrap();
let results = interp.eval("nil").unwrap();
assert_eq!(results, vec![Value::Nil]);
}
fn test_eval_bool() {
assert_eq!(interp.eval("#t").unwrap(), vec![Value::Bool(true)]);
assert_eq!(interp.eval("#T").unwrap(), vec![Value::Bool(true)]);
fn test_eval_empty_list_is_nil() {
assert_eq!(interp.eval("()").unwrap(), vec![Value::Nil]);
fn test_eval_false_is_nil() {
assert_eq!(interp.eval("#f").unwrap(), vec![Value::Nil]);
assert_eq!(interp.eval("#F").unwrap(), vec![Value::Nil]);
fn test_eval_number() {
let results = interp.eval("0.75").unwrap();
assert_eq!(results, vec![Value::Number(Fraction::new(3, 4))]);
fn test_eval_integer() {
let results = interp.eval("42").unwrap();
assert_eq!(results, vec![Value::Number(Fraction::from_integer(42))]);
fn test_eval_string() {
assert_eq!(
interp.eval(r#""hello""#).unwrap(),
vec![Value::String("hello".to_string())]
);
fn test_eval_empty_string() {
interp.eval(r#""""#).unwrap(),
vec![Value::String(String::new())]
fn test_eval_string_with_unicode() {
interp.eval(r#""日本語""#).unwrap(),
vec![Value::String("日本語".to_string())]
fn test_eval_empty() {
let results = interp.eval("").unwrap();
assert!(results.is_empty());
fn test_eval_revision() {
let results = interp.eval("revision").unwrap();
assert_eq!(results.len(), 1);
match &results[0] {
Value::String(s) => {
assert!(!s.is_empty());
assert!(s.chars().all(|c| c.is_ascii_hexdigit()));
_ => panic!("expected string, got {:?}", results[0]),
fn test_eval_undefined_symbol() {
let result = interp.eval("unknown");
assert!(result.is_err());
fn test_eval_debug_call() {
let results = interp.eval(r#"(debug "hello")"#).unwrap();
fn test_eval_debug_variadic() {
let results = interp.eval(r#"(debug "hello" revision 1 2 3)"#).unwrap();
fn test_eval_debug_no_args() {
let results = interp.eval("(debug)").unwrap();