flo_scene 0.2.0

Entity-messaging system for composing large programs from small programs
Documentation
use flo_scene::*;
use flo_scene::programs::*;

use std::time::{Duration};

#[test]
fn basic_timeout() {
    let scene           = Scene::default();
    let test_program    = SubProgramId::new();

    TestBuilder::new()
        .send_message(TimerRequest::CallAfter(test_program, 1, Duration::from_millis(10)))
        .expect_message(|_: TimeOut| { Ok(()) })
        .run_in_scene_with_threads(&scene, test_program, 5);
}

#[test]
fn multiple_timeouts() {
    let scene           = Scene::default();
    let test_program    = SubProgramId::new();

    TestBuilder::new()
        .send_message(TimerRequest::CallAfter(test_program, 3, Duration::from_millis(15)))
        .send_message(TimerRequest::CallAfter(test_program, 1, Duration::from_millis(5)))
        .send_message(TimerRequest::CallAfter(test_program, 2, Duration::from_millis(10)))
        .expect_message(|TimeOut(id, _)| { if id != 1 { Err(format!("Expected timer 1 first")) } else { Ok(()) } })
        .expect_message(|TimeOut(id, _)| { if id != 2 { Err(format!("Expected timer 2 next")) } else { Ok(()) } })
        .expect_message(|TimeOut(id, _)| { if id != 3 { Err(format!("Expected timer 3 last")) } else { Ok(()) } })
        .run_in_scene_with_threads(&scene, test_program, 5);
}

#[test]
fn repeating_timeouts() {
    let scene           = Scene::default();
    let test_program    = SubProgramId::new();

    TestBuilder::new()
        .send_message(TimerRequest::CallEvery(test_program, 1, Duration::from_millis(5)))
        .expect_message(|_: TimeOut| { Ok(()) })
        .expect_message(|_: TimeOut| { Ok(()) })
        .expect_message(|_: TimeOut| { Ok(()) })
        .run_in_scene_with_threads(&scene, test_program, 5);
}