use super::scorer::Scorecard;
#[derive(Debug, Clone, Copy)]
pub struct BeforeAfter {
pub targeted_before: f64,
pub targeted_after: f64,
pub control_before: f64,
pub control_after: f64,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Verdict {
pub targeted_delta: f64,
pub control_delta: f64,
pub improved: bool,
pub control_held: bool,
pub accepted: bool,
}
impl BeforeAfter {
pub fn from_scorecards(
targeted_before: &Scorecard,
targeted_after: &Scorecard,
control_before: &Scorecard,
control_after: &Scorecard,
) -> Self {
Self {
targeted_before: targeted_before.overall(),
targeted_after: targeted_after.overall(),
control_before: control_before.overall(),
control_after: control_after.overall(),
}
}
pub fn evaluate(&self, improve_margin: f64, control_tolerance: f64) -> Verdict {
let targeted_delta = self.targeted_after - self.targeted_before;
let control_delta = self.control_after - self.control_before;
let improved = targeted_delta >= improve_margin;
let control_held = self.control_after >= self.control_before - control_tolerance;
Verdict {
targeted_delta,
control_delta,
improved,
control_held,
accepted: improved && control_held,
}
}
}