Write tests
This commit is contained in:
parent
a4013fa26d
commit
9417d0d160
143
tests/functions.rs
Normal file
143
tests/functions.rs
Normal 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))
|
||||
);
|
||||
}
|
@ -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::*;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user