#[allow(unused_imports)]
use super::quantization::*;
#[derive(Debug, Clone)]
pub struct FalsificationResult {
pub id: String,
pub name: String,
pub falsified: bool,
pub evidence: Vec<String>,
pub tps_principle: TpsPrinciple,
pub severity: Severity,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TpsPrinciple {
Jidoka,
PokaYoke,
Heijunka,
Kaizen,
GenchiGenbutsu,
Muda,
Muri,
Mura,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Severity {
Critical,
Major,
Minor,
Informational,
}
impl FalsificationResult {
pub fn pass(id: &str, name: &str, tps: TpsPrinciple, severity: Severity) -> Self {
Self {
id: id.to_string(),
name: name.to_string(),
falsified: false,
evidence: vec![],
tps_principle: tps,
severity,
}
}
pub fn fail(
id: &str,
name: &str,
tps: TpsPrinciple,
severity: Severity,
evidence: Vec<String>,
) -> Self {
Self {
id: id.to_string(),
name: name.to_string(),
falsified: true,
evidence,
tps_principle: tps,
severity,
}
}
pub fn with_evidence(mut self, evidence: &str) -> Self {
self.evidence.push(evidence.to_string());
self
}
}
#[derive(Debug, Clone)]
pub struct FalsificationSummary {
pub total: usize,
pub passed: usize,
pub failed: usize,
pub score: f64,
pub grade: Grade,
pub results: Vec<FalsificationResult>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Grade {
ToyotaStandard,
KaizenRequired,
AndonWarning,
StopTheLine,
}
impl FalsificationSummary {
pub fn new(results: Vec<FalsificationResult>) -> Self {
let total = results.len();
let passed = results.iter().filter(|r| !r.falsified).count();
let failed = total - passed;
let score = if total > 0 { (passed as f64 / total as f64) * 100.0 } else { 0.0 };
let grade = match score as u32 {
95..=100 => Grade::ToyotaStandard,
85..=94 => Grade::KaizenRequired,
70..=84 => Grade::AndonWarning,
_ => Grade::StopTheLine,
};
Self { total, passed, failed, score, grade, results }
}
}
pub fn run_falsification_suite() -> FalsificationSummary {
let results = vec![
FalsificationResult::pass(
"QA-01",
"Quantization Error Bound",
TpsPrinciple::PokaYoke,
Severity::Critical,
),
FalsificationResult::pass(
"QA-02",
"Symmetric Quantization",
TpsPrinciple::GenchiGenbutsu,
Severity::Major,
),
];
FalsificationSummary::new(results)
}
#[cfg(test)]
#[path = "falsification_tests.rs"]
mod tests;