dust/tests/types.rs

51 lines
1.1 KiB
Rust
Raw Normal View History

2024-01-06 07:26:51 +00:00
use dust_lang::*;
#[test]
fn simple_type_check() {
let result = interpret("x <bool> = 1");
assert!(result.unwrap_err().is_error(&Error::TypeCheck {
expected: Type::Boolean,
actual: Type::Integer
}));
}
#[test]
fn argument_count_check() {
let source = "
2024-01-10 01:38:40 +00:00
foo = (x <int>) <int> {
2024-01-06 07:26:51 +00:00
x
}
foo()
";
2024-01-23 22:08:26 +00:00
let result = interpret(source);
2024-01-06 07:26:51 +00:00
assert_eq!(
2024-01-10 01:38:40 +00:00
"Expected 1 arguments, but got 0. Occured at (5, 12) to (5, 17). Source: foo()",
2024-01-06 07:26:51 +00:00
result.unwrap_err().to_string()
)
}
#[test]
fn callback_type_check() {
let result = interpret(
"
x = (cb <() -> bool>) <bool> {
cb()
}
x(() <int> { 1 })
",
);
assert!(result.unwrap_err().is_error(&Error::TypeCheck {
expected: Type::Function {
parameter_types: vec![],
return_type: Box::new(Type::Boolean),
},
actual: Type::Function {
parameter_types: vec![],
return_type: Box::new(Type::Integer),
},
}));
}