blackopsrepl's picture
feat(app): add hospital scheduling application
b7e7f16
use chrono::Timelike;
use crate::domain::{Employee, Shift};
use super::coverage::{candidate_redundancy_is_valid, public_candidate_counts};
/// Verifies that the exact public dataset we will ship still matches generator goals.
pub(super) fn validate_public_dataset(employees: &[Employee], shifts: &[Shift]) {
let counts = public_candidate_counts(employees, shifts);
let min_count = counts.iter().copied().min().unwrap_or(0);
let three_plus = counts.iter().filter(|&&count| count >= 3).count();
let weakest: Vec<String> = shifts
.iter()
.zip(counts.iter())
.filter(|(_, &count)| count == min_count)
.take(5)
.map(|(shift, &count)| {
format!(
"{} {} {} -> {}",
shift.location,
shift.start.time().hour(),
shift.required_skill,
count
)
})
.collect();
assert!(
candidate_redundancy_is_valid(employees, shifts),
"public dataset should maintain candidate redundancy; min_count={min_count}, three_plus={three_plus}/{} weakest={weakest:?}",
counts.len()
);
}