pub const AC_SD_001_MIN_RATIO: f32 = 0.9;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Sd001Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_throughput_parity(safetensors_tps: f32, gguf_tps: f32) -> Sd001Verdict {
if !safetensors_tps.is_finite() || !gguf_tps.is_finite() { return Sd001Verdict::Fail; }
if safetensors_tps <= 0.0 || gguf_tps <= 0.0 { return Sd001Verdict::Fail; }
let ratio = safetensors_tps / gguf_tps;
if !ratio.is_finite() { return Sd001Verdict::Fail; }
if ratio < AC_SD_001_MIN_RATIO { return Sd001Verdict::Fail; }
Sd001Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SdTensorType { Q4K, Q6K, Q8K, F16, F32, Bf16 }
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Sd002Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_quantized_dispatch(weight_tensor_types: &[SdTensorType]) -> Sd002Verdict {
if weight_tensor_types.is_empty() { return Sd002Verdict::Fail; }
for &t in weight_tensor_types {
if t != SdTensorType::Q4K { return Sd002Verdict::Fail; }
}
Sd002Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Sd003Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_output_parity(
safetensors_argmax: &[u32],
gguf_argmax: &[u32],
) -> Sd003Verdict {
if safetensors_argmax.is_empty() || gguf_argmax.is_empty() { return Sd003Verdict::Fail; }
if safetensors_argmax.len() != gguf_argmax.len() { return Sd003Verdict::Fail; }
if safetensors_argmax == gguf_argmax { Sd003Verdict::Pass } else { Sd003Verdict::Fail }
}
#[cfg(test)]
mod tests {
use super::*;
#[test] fn sd001_pass_above_threshold() {
assert_eq!(verdict_from_throughput_parity(9.0, 9.5), Sd001Verdict::Pass);
}
#[test] fn sd001_pass_at_threshold() {
assert_eq!(verdict_from_throughput_parity(9.0, 10.0), Sd001Verdict::Pass);
}
#[test] fn sd001_fail_canonical_regression() {
assert_eq!(verdict_from_throughput_parity(6.0, 9.5), Sd001Verdict::Fail);
}
#[test] fn sd001_fail_severe_regression() {
assert_eq!(verdict_from_throughput_parity(2.4, 9.5), Sd001Verdict::Fail);
}
#[test] fn sd001_fail_zero_gguf() {
assert_eq!(verdict_from_throughput_parity(9.0, 0.0), Sd001Verdict::Fail);
}
#[test] fn sd001_fail_nan() {
assert_eq!(verdict_from_throughput_parity(f32::NAN, 9.5), Sd001Verdict::Fail);
}
#[test] fn sd002_pass_all_q4k() {
let types = vec![SdTensorType::Q4K; 339];
assert_eq!(verdict_from_quantized_dispatch(&types), Sd002Verdict::Pass);
}
#[test] fn sd002_fail_partial_f32() {
let mut types = vec![SdTensorType::Q4K; 338];
types.push(SdTensorType::F32);
assert_eq!(verdict_from_quantized_dispatch(&types), Sd002Verdict::Fail);
}
#[test] fn sd002_fail_partial_f16() {
let mut types = vec![SdTensorType::Q4K; 338];
types.push(SdTensorType::F16);
assert_eq!(verdict_from_quantized_dispatch(&types), Sd002Verdict::Fail);
}
#[test] fn sd002_fail_partial_q6k() {
let mut types = vec![SdTensorType::Q4K; 338];
types.push(SdTensorType::Q6K);
assert_eq!(verdict_from_quantized_dispatch(&types), Sd002Verdict::Fail);
}
#[test] fn sd002_fail_empty() {
assert_eq!(verdict_from_quantized_dispatch(&[]), Sd002Verdict::Fail);
}
#[test] fn sd003_pass_canonical() {
let st = [42_u32, 100, 7, 99];
let gg = [42_u32, 100, 7, 99];
assert_eq!(verdict_from_output_parity(&st, &gg), Sd003Verdict::Pass);
}
#[test] fn sd003_fail_step_divergence() {
let st = [42_u32, 100, 7, 99];
let gg = [42_u32, 100, 8, 99]; assert_eq!(verdict_from_output_parity(&st, &gg), Sd003Verdict::Fail);
}
#[test] fn sd003_fail_length_mismatch() {
let st = [42_u32];
let gg = [42_u32, 100];
assert_eq!(verdict_from_output_parity(&st, &gg), Sd003Verdict::Fail);
}
#[test] fn sd003_fail_empty() {
assert_eq!(verdict_from_output_parity(&[], &[]), Sd003Verdict::Fail);
}
#[test] fn provenance_constants() {
assert!((AC_SD_001_MIN_RATIO - 0.9).abs() < 1e-9);
}
}