1
0

Write tests

This commit is contained in:
Jeff 2024-01-06 02:18:30 -05:00
parent a4013fa26d
commit 9417d0d160
2 changed files with 145 additions and 50 deletions

143
tests/functions.rs Normal file
View File

@ -0,0 +1,143 @@
use dust_lang::*;
#[test]
fn function_call() {
assert_eq!(
interpret(
"
foobar = (message <str>) <str> { message }
foobar('Hiya')
",
),
Ok(Value::string("Hiya".to_string()))
);
}
#[test]
fn call_empty_function() {
assert_eq!(
interpret(
"
foobar = (message <str>) <none> {}
foobar('Hiya')
",
),
Ok(Value::none())
);
}
#[test]
fn callback() {
assert_eq!(
interpret(
"
foobar = (cb <() -> str>) <str> {
cb()
}
foobar(() <str> { 'Hiya' })
",
),
Ok(Value::string("Hiya".to_string()))
);
}
#[test]
fn built_in_function_call() {
assert_eq!(interpret("output('Hiya')"), Ok(Value::Option(None)));
}
#[test]
fn function_context_does_not_capture_normal_values() {
assert_eq!(
interpret(
"
x = 1
foo = () <any> { x }
"
),
Err(Error::VariableIdentifierNotFound("x".to_string()))
);
}
#[test]
fn function_context_captures_functions() {
assert_eq!(
interpret(
"
x = 1
foo = (x <int>) <int> { x }
foo(2)
"
),
Ok(Value::Integer(2))
);
assert_eq!(
interpret(
"
bar = () <int> { 2 }
foo = () <int> { bar() }
foo()
"
),
Ok(Value::Integer(2))
);
assert_eq!(
interpret(
"
foo = () <int> { bar() }
foo()
bar = () <int> { 2 }
"
),
Ok(Value::Integer(2))
);
}
#[test]
fn function_context_captures_structure_definitions() {
let map = Map::new();
map.set("name".to_string(), Value::string("bob"), None)
.unwrap();
assert_eq!(
interpret(
"
User = struct {
name <str>
}
bob = () <User> {
new User {
name = 'bob'
}
}
bob()
"
),
Ok(Value::Map(map.clone()))
);
assert_eq!(
interpret(
"
bob = () <User> {
new User {
name = 'bob'
}
}
User = struct {
name <str>
}
bob()
"
),
Ok(Value::Map(map))
);
}

View File

@ -1,3 +1,5 @@
mod functions;
mod structure {
use std::collections::BTreeMap;
@ -233,56 +235,6 @@ mod value {
}
}
mod function_call {
use dust_lang::*;
#[test]
fn function_call() {
assert_eq!(
interpret(
"
foobar = (message <str>) <str> { message }
foobar('Hiya')
",
),
Ok(Value::string("Hiya".to_string()))
);
}
#[test]
fn call_empty_function() {
assert_eq!(
interpret(
"
foobar = (message <str>) <none> {}
foobar('Hiya')
",
),
Ok(Value::none())
);
}
#[test]
fn callback() {
assert_eq!(
interpret(
"
foobar = (cb <() -> str>) <str> {
cb()
}
foobar(() <str> { 'Hiya' })
",
),
Ok(Value::string("Hiya".to_string()))
);
}
#[test]
fn built_in_function_call() {
assert_eq!(interpret("output('Hiya')"), Ok(Value::Option(None)));
}
}
mod if_else {
use dust_lang::*;