dust/tests/variables.rs
2024-03-17 07:31:45 -04:00

59 lines
1.5 KiB
Rust

use dust_lang::{
abstract_tree::{AbstractTree, Block, Expression, Identifier, Statement, Type},
error::{Error, TypeConflict, ValidationError},
*,
};
#[test]
fn set_and_get_variable() {
assert_eq!(
interpret("foobar = true; foobar"),
Ok(Some(Value::boolean(true)))
);
}
#[test]
fn set_variable_with_type() {
assert_eq!(
interpret("foobar: bool = true; foobar"),
Ok(Some(Value::boolean(true)))
);
}
#[test]
fn set_variable_with_type_error() {
assert_eq!(
interpret("foobar: str = true"),
Err(vec![Error::Validation {
error: ValidationError::TypeCheck {
conflict: TypeConflict {
actual: Type::Boolean,
expected: Type::String
},
actual_position: (0, 0),
expected_position: (0, 0)
},
position: (0, 18)
}])
);
}
#[test]
fn function_variable() {
assert_eq!(
interpret("foobar = (x: int): int { x }; foobar"),
Ok(Some(Value::function(
vec![(
Identifier::new("x"),
Type::Integer.with_position((0..0).into())
)],
Type::Integer.with_position((0..0).into()),
Block::new(vec![Statement::Expression(Expression::Identifier(
Identifier::new("x")
))
.with_position((0..0).into())])
.with_position((0..0).into())
)))
);
}