#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum IntegrityClass {
Nominal,
Unavailable,
MisleadingInformation,
HazardousMi,
}
pub fn classify(true_error: f64, pl: f64, al: f64) -> IntegrityClass {
let e = true_error.abs();
if pl > al {
IntegrityClass::Unavailable
} else if e <= pl {
IntegrityClass::Nominal
} else if e <= al {
IntegrityClass::MisleadingInformation
} else {
IntegrityClass::HazardousMi
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn four_regions() {
assert_eq!(classify(3.0, 4.0, 10.0), IntegrityClass::Nominal); assert_eq!(
classify(6.0, 4.0, 10.0),
IntegrityClass::MisleadingInformation
); assert_eq!(classify(12.0, 4.0, 10.0), IntegrityClass::HazardousMi); assert_eq!(classify(0.0, 11.0, 10.0), IntegrityClass::Unavailable);
assert_eq!(classify(50.0, 11.0, 10.0), IntegrityClass::Unavailable);
}
#[test]
fn boundaries_and_sign() {
assert_eq!(classify(4.0, 4.0, 10.0), IntegrityClass::Nominal);
assert_eq!(
classify(10.0, 4.0, 10.0),
IntegrityClass::MisleadingInformation
);
assert_eq!(
classify(-6.0, 4.0, 10.0),
IntegrityClass::MisleadingInformation
);
assert_eq!(classify(2.0, 10.0, 10.0), IntegrityClass::Nominal);
}
}