mod common;
use common::*;
use hail_core::types::*;
#[test]
#[ignore]
fn against_skipped_splits() {
let mut s = init_skip();
s.request(StateChangeRequest::Split);
s.update();
sleep(900); s.request(StateChangeRequest::Split);
s.update();
same_time!(s.rta.run_pb_diffs[0].val(), -100);
same_time!(s.rta.run_pb_seg_diffs[0].val(), -100);
assert_eq!(s.rta.run_pb_statuses[0], SplitStatus::Ahead);
assert_eq!(s.rta.active_pb_status, SplitStatus::None);
assert_eq!(s.rta.run_gold_statuses[0], SplitStatus::Behind); assert_eq!(s.rta.active_pb_diff, 0);
same_time!(s.rta.run_gold_diffs[0].val(), 100);
sleep(1000); s.request(StateChangeRequest::Split);
s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Ahead); assert_eq!(s.rta.run_pb_diffs[1], TimeType::None);
assert_eq!(s.rta.run_pb_seg_diffs[1], TimeType::None);
assert_eq!(s.rta.run_pb_statuses[1], SplitStatus::None);
assert_eq!(s.rta.run_gold_statuses[1], SplitStatus::Behind);
sleep(1050); s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Losing); }
#[test]
#[ignore]
fn against_missing_golds() {
let mut s = init_missinggolds();
s.request(StateChangeRequest::Split);
s.update();
sleep(700); s.request(StateChangeRequest::Split);
s.update();
sleep(100); assert_eq!(s.rta.run_gold_statuses[0], SplitStatus::Gold);
same_time!(s.rta.run_gold_diffs[0].val(), -100); same_time!(s.rta.run_gold_seg_diffs[0].val(), -100);
s.request(StateChangeRequest::Split);
s.update();
sleep(100); assert_eq!(s.rta.active_gold_status, SplitStatus::None); assert_eq!(s.rta.active_gold_diff, 0);
assert_eq!(s.rta.run_gold_diffs[1], TimeType::None);
assert_eq!(s.rta.run_gold_seg_diffs[1], TimeType::None); s.request(StateChangeRequest::Split);
s.update();
assert_eq!(s.rta.active_gold_status, SplitStatus::None); assert_eq!(s.rta.active_gold_diff, 0);
assert_eq!(s.rta.run_gold_diffs[2], TimeType::None);
same_time!(s.rta.run_gold_seg_diffs[2].val(), -700); sleep(100);
s.request(StateChangeRequest::Split);
s.update();
let times = &[700, 100, 100, 100];
for (i, g) in s.run.rta_gold_segments.iter().enumerate() {
same_time!(g.val(), times[i]);
}
}
#[test]
#[ignore]
fn skipping_splits() {
let mut s = init_noofset();
s.request(StateChangeRequest::Split);
s.update();
sleep(2100); s.request(StateChangeRequest::Skip);
s.update();
assert_eq!(s.rta.run_split_times[0], TimeType::None);
assert_eq!(s.rta.run_seg_times[0], TimeType::None);
assert_eq!(s.rta.active_pb_status, SplitStatus::Behind); assert_eq!(s.rta.run_pb_statuses[0], SplitStatus::None);
assert_eq!(s.rta.run_pb_diffs[0], TimeType::None);
assert_eq!(s.rta.run_pb_seg_diffs[0], TimeType::None);
sleep(400); s.request(StateChangeRequest::Split);
s.update();
same_time!(s.rta.run_split_times[1].val(), 2500);
assert_eq!(s.rta.run_seg_times[1], TimeType::None);
assert_eq!(s.rta.run_pb_statuses[1], SplitStatus::Behind);
same_time!(s.rta.run_pb_diffs[1].val(), 500);
assert_eq!(s.rta.run_pb_seg_diffs[1], TimeType::None);
sleep(1000); s.request(StateChangeRequest::Skip);
s.update();
assert_eq!(s.rta.run_split_times[2], TimeType::None);
assert_eq!(s.rta.run_seg_times[2], TimeType::None);
assert_eq!(s.rta.active_pb_status, SplitStatus::Ahead); assert_eq!(s.rta.run_pb_statuses[2], SplitStatus::None);
assert_eq!(s.rta.run_pb_diffs[2], TimeType::None);
assert_eq!(s.rta.run_pb_seg_diffs[2], TimeType::None);
let mut s = init_noofset();
s.request(StateChangeRequest::Split);
s.update();
sleep(2100); s.request(StateChangeRequest::Skip);
s.update();
assert_eq!(s.rta.run_split_times[0], TimeType::None);
assert_eq!(s.rta.run_seg_times[0], TimeType::None);
assert_eq!(s.rta.active_pb_status, SplitStatus::Behind); assert_eq!(s.rta.run_pb_statuses[0], SplitStatus::None);
assert_eq!(s.rta.run_pb_diffs[0], TimeType::None);
assert_eq!(s.rta.run_pb_seg_diffs[0], TimeType::None);
sleep(400); s.request(StateChangeRequest::Split);
s.update();
same_time!(s.rta.run_split_times[1].val(), 2500);
assert_eq!(s.rta.run_seg_times[1], TimeType::None);
assert_eq!(s.rta.run_pb_statuses[1], SplitStatus::Behind);
same_time!(s.rta.run_pb_diffs[1].val(), 500);
assert_eq!(s.rta.run_pb_seg_diffs[1], TimeType::None);
sleep(1000); s.request(StateChangeRequest::Split);
s.update();
same_time!(s.rta.run_split_times[2].val(), 3500);
same_time!(s.rta.run_seg_times[2].val(), 1000);
assert_eq!(s.rta.active_pb_status, SplitStatus::Ahead); assert_eq!(s.rta.run_pb_statuses[2], SplitStatus::Behind);
same_time!(s.rta.run_pb_diffs[2].val(), 500);
same_time!(s.rta.run_pb_seg_diffs[2].val(), 0);
}
#[test]
#[ignore]
fn skipping_more_statuses() {
let mut s = init_noofset();
s.request(StateChangeRequest::Split);
s.update();
sleep(1500); s.request(StateChangeRequest::Split);
s.update();
assert_eq!(s.rta.run_pb_statuses[0], SplitStatus::Behind); same_time!(s.rta.run_pb_diffs[0].val(), 500);
s.request(StateChangeRequest::Skip); s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Ahead); sleep(1800); s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Gaining);
let mut s = init_noofset();
s.request(StateChangeRequest::Split);
s.update();
sleep(500); s.request(StateChangeRequest::Split);
s.update();
assert_eq!(s.rta.run_pb_statuses[0], SplitStatus::Gold); same_time!(s.rta.run_pb_diffs[0].val(), -500);
s.request(StateChangeRequest::Skip); s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Ahead); sleep(2100); s.update();
assert_eq!(s.rta.active_pb_status, SplitStatus::Losing); }