use std::collections::BTreeMap;
use crate::wpt_report::{TestResult, WptReport, WptRunInfo};
pub struct WptReportMerger {
run_info: Option<WptRunInfo>,
time_start: u64,
time_end: u64,
scores: BTreeMap<String, TestResult>,
}
impl Default for WptReportMerger {
fn default() -> Self {
Self::new()
}
}
impl WptReportMerger {
pub fn new() -> Self {
Self {
run_info: None,
time_start: u64::MAX,
time_end: 0,
scores: BTreeMap::new(),
}
}
pub fn add_chunk(&mut self, chunk: WptReport) {
match &mut self.run_info {
None => {
self.run_info = Some(chunk.run_info);
}
Some(run_info) => {
if *run_info != chunk.run_info {
panic!("run_info doesn't match")
}
}
}
self.time_start = self.time_start.min(chunk.time_start);
self.time_end = self.time_end.max(chunk.time_end);
for result in chunk.results.into_iter() {
self.scores.insert(result.test.clone(), result);
}
}
pub fn into_merged_report(self) -> WptReport {
WptReport {
run_info: self.run_info.unwrap(),
time_start: self.time_start,
time_end: self.time_end,
results: self.scores.into_values().collect(),
}
}
}