use lunatic::protocol::End;
use lunatic::{spawn, spawn_link, test, ProcessConfig};
#[test]
fn spawn() {
spawn!(|| {});
spawn!(|_mailbox: Mailbox<()>| {});
let local_var = "Hello".to_owned();
spawn!(|local_var| assert_eq!(local_var, "Hello"));
spawn!(|local_var = {"Hello".to_owned()}| assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn!(|local_var, _mailbox: Mailbox<()>| assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn!(|local_var| {
local_var.push_str(", world");
});
}
#[test]
fn spawn_config() {
let config = ProcessConfig::new().unwrap();
spawn!(&config, || {});
spawn!(&config, |_mailbox: Mailbox<()>| {});
let local_var = "Hello".to_owned();
spawn!(&config, |local_var| assert_eq!(local_var, "Hello"));
spawn!(&config, | local_var = { "Hello".to_owned() } | assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn!(&config, |local_var, _mailbox: Mailbox<()>| assert_eq!(
local_var,
"Hello"
));
let local_var = "Hello".to_owned();
spawn!(&config, |local_var| {
local_var.push_str(", world");
});
}
#[test]
fn spawn_link() {
spawn_link!(|| {});
spawn_link!(|_mailbox: Mailbox<()>| {});
let local_var = "Hello".to_owned();
spawn_link!(|local_var| assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn_link!(|local_var, _mailbox: Mailbox<()>| assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn_link!(|local_var| {
local_var.push_str(", world");
});
spawn_link!(|_proto: Protocol<End>| {});
let local_var = "Hello".to_owned();
spawn_link!(|local_var, _proto: Protocol<End>| assert_eq!(local_var, "Hello"));
}
#[test]
fn spawn_link_config() {
let config = ProcessConfig::new().unwrap();
spawn_link!(&config, || {});
spawn_link!(&config, |_mailbox: Mailbox<()>| {});
let local_var = "Hello".to_owned();
spawn_link!(&config, |local_var| assert_eq!(local_var, "Hello"));
let local_var = "Hello".to_owned();
spawn_link!(&config, |local_var, _mailbox: Mailbox<()>| assert_eq!(
local_var,
"Hello"
));
let local_var = "Hello".to_owned();
spawn_link!(&config, |local_var| {
local_var.push_str(", world");
});
spawn_link!(&config, |_proto: Protocol<End>| {});
let local_var = "Hello".to_owned();
spawn_link!(&config, |local_var, _proto: Protocol<End>| assert_eq!(
local_var,
"Hello"
));
}
#[test]
fn multi_caputre() {
let var1 = 2;
let var2 = 3;
spawn!(|var1, var2| assert_eq!(var1, var2));
spawn_link!(|var1, var2| assert_eq!(var1, var2));
}
#[test]
fn task() {
let task = spawn_link!(@task || 33);
assert_eq!(task.result(), 33);
let task = spawn_link!(@task |a = 2, b = 3| a + b);
assert_eq!(task.result(), 5);
let a = "hello".to_owned();
let b = "world".to_owned();
let task = spawn_link!(@task |a, b| format!("{} {}",a, b));
assert_eq!(task.result(), "hello world");
let a = "Hello".to_owned();
let task = spawn_link!(@task |a| {
a.push_str(", world");
a
});
assert_eq!(task.result(), "Hello, world");
let task = spawn_link!(@task || {
let err = Err(());
err?;
Ok(())
});
assert_eq!(task.result(), Err(()));
let task = spawn_link!(@task |a = 2, b = 3| {
if a == 2 {
return 0;
}
a + b
});
assert_eq!(task.result(), 0);
}
#[test]
fn task_config() {
let config = ProcessConfig::new().unwrap();
let task = spawn_link!(@task &config, || 33);
assert_eq!(task.result(), 33);
let task = spawn_link!(@task &config, |a = 2, b = 3| a + b);
assert_eq!(task.result(), 5);
let a = "hello".to_owned();
let b = "world".to_owned();
let task = spawn_link!(@task &config, |a, b| format!("{} {}",a, b));
assert_eq!(task.result(), "hello world");
let a = "Hello".to_owned();
let task = spawn_link!(@task &config, |a| {
a.push_str(", world");
a
});
assert_eq!(task.result(), "Hello, world");
}
#[test]
fn functions() {
spawn!(|| func1());
spawn!(|a = 3, b = 3|func2(a, b));
}
fn func1() {}
fn func2(a: i32, b: i32) {
assert_eq!(a, b)
}