use crate::model::{Criticality, Level};
pub fn criticality(severity: Level, probability: Level) -> Criticality {
use Level::{High, Low, Medium};
match (severity, probability) {
(High, High) | (High, Medium) | (Medium, High) => High,
(Medium, Medium) | (High, Low) | (Low, High) => Medium,
(Low, Low) | (Low, Medium) | (Medium, Low) => Low,
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::model::Level::{High, Low, Medium};
#[test]
fn matrix_high_bucket() {
assert_eq!(criticality(High, High), High);
assert_eq!(criticality(High, Medium), High);
assert_eq!(criticality(Medium, High), High);
}
#[test]
fn matrix_medium_bucket() {
assert_eq!(criticality(Medium, Medium), Medium);
assert_eq!(criticality(High, Low), Medium);
assert_eq!(criticality(Low, High), Medium);
}
#[test]
fn matrix_low_bucket() {
assert_eq!(criticality(Low, Low), Low);
assert_eq!(criticality(Low, Medium), Low);
assert_eq!(criticality(Medium, Low), Low);
}
#[test]
fn matrix_is_symmetric_in_s_and_p() {
for s in [Low, Medium, High] {
for p in [Low, Medium, High] {
assert_eq!(
criticality(s, p),
criticality(p, s),
"matrix must be symmetric for ({s:?},{p:?})"
);
}
}
}
}