lunatic 0.14.1

Helper library for building Rust applications that run on lunatic.
Documentation
use std::time::Duration;

use lunatic::{sleep, spawn_link, ProcessConfig};
use lunatic_test::test;

#[test]
fn simple_task() {
    let task = spawn_link!(@task |a = 2, b = {3}| a + b);
    assert_eq!(task.result(), 5);
}

#[allow(unreachable_code)]
#[test]
#[should_panic]
fn failing_child_kills_task() {
    let task = spawn_link!(@task || panic!(""));
    task.result()
}

#[test]
#[should_panic]
fn result_must_be_called() {
    let _ = spawn_link!(@task  || {});
}

#[test]
fn recursive_count() {
    let mut config = ProcessConfig::new().unwrap();
    config.set_can_spawn_processes(true);
    let task = spawn_link!(@task &config, |n = 1_000| recursive_count_sub(n));
    assert_eq!(500500, task.result());
}

fn recursive_count_sub(n: i32) -> i32 {
    if n > 0 {
        n + spawn_link!(@task |n = {n - 1}| recursive_count_sub(n)).result()
    } else {
        0
    }
}

#[test]
fn timeout_task() {
    let task = spawn_link!(@task || sleep(Duration::from_millis(25)));
    let result = task.result_timeout(Duration::from_millis(10));
    assert!(result.unwrap_err().is_timed_out());
}