hail_core 0.3.0

a library for implementing a speedrun timer
Documentation
mod common;
use common::*;
use hail_core::{HailState, StateDump, types::*};
use ron::to_string;

#[test]
fn save_restore_empty() {
    let s = init();
    let dump = s.create_dump();
    let s2 = HailState::from_dump(&dump);
    same_state!(s, s2);
}

#[test]
#[ignore]
fn save_restore() {
    let mut s = init();
    s.request(StateChangeRequest::SetComparison(Comparison::Golds));
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(1300); // sleep through offset + 100ms of segment
    s.update();
    s.update();
    sleep(750); // wait until 50ms into the next segment
    s.update();
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(60); // sleep slightly into the next segment but not far enough to be behind
    s.update();
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(40);
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(2040); // current time 950, diff -50, total gold times 2999, wait until 2990
    s.update();

    let dump = to_string(&s.create_dump()).unwrap();
    let s2 = HailState::from_dump(&StateDump::from_reader(dump.as_bytes()).unwrap());
    same_state!(s, s2);
}

#[test]
#[ignore]
fn save_restore_firstrun() {
    let mut s = init_empty();
    s.request(StateChangeRequest::SetComparison(Comparison::Golds));
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(1300);
    s.update();
    s.update();
    sleep(150);
    s.update();
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(60);
    s.update();
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(40);
    s.request(StateChangeRequest::Split);
    s.update();
    sleep(1000);
    s.update();

    let dump = to_string(&s.create_dump()).unwrap();
    let s2 = HailState::from_dump(&StateDump::from_reader(dump.as_bytes()).unwrap());
    same_state!(s, s2);
}