use super::formula::Precision;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Fidelity {
BitIdentical,
Envelope,
}
impl Fidelity {
pub fn meets(self, required: Fidelity) -> bool {
match (self, required) {
(Fidelity::BitIdentical, _) => true,
(Fidelity::Envelope, Fidelity::Envelope) => true,
(Fidelity::Envelope, Fidelity::BitIdentical) => false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Coverage {
Serves {
fidelity: Fidelity,
precisions: &'static [Precision],
},
Absent,
}
impl Coverage {
pub fn serves(self) -> bool {
matches!(self, Coverage::Serves { .. })
}
pub fn meets(self, required: Fidelity) -> bool {
match self {
Coverage::Serves { fidelity, .. } => fidelity.meets(required),
Coverage::Absent => false,
}
}
pub fn admits(self, precision: Precision) -> bool {
match self {
Coverage::Serves { precisions, .. } => precisions.contains(&precision),
Coverage::Absent => false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Dispatch {
Offered,
Elected,
Translated,
}
#[cfg(test)]
#[path = "tests/coverage_tests.rs"]
mod tests;