use quant_governor::{
evaluate, AdmissibilityClass, CodecDecision, CodecProfile, ContentType, GovernancePolicy,
GovernanceRequest,
};
#[test]
fn strict_policy_requires_exact_fallback() {
let policy = GovernancePolicy::accuracy_oriented();
let request = GovernanceRequest {
content_type: ContentType::Structured,
size_bytes: 1000,
accuracy_requirement: 0.999,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let decision = evaluate(request, &policy).unwrap();
assert_eq!(decision.codec, CodecProfile::Raw);
assert_eq!(decision.degradation_budget, 0.0);
}
#[test]
fn audio_low_latency_selects_turbo() {
let policy = GovernancePolicy::low_latency();
let request = GovernanceRequest {
content_type: ContentType::Audio,
size_bytes: 2000, latency_tolerance_ms: 50, accuracy_requirement: 0.8,
admissibility: AdmissibilityClass::Standard,
};
let decision = evaluate(request, &policy).unwrap();
assert_eq!(decision.codec, CodecProfile::Turbo);
}
#[test]
fn model_critical_selects_raw() {
let policy = GovernancePolicy::default();
let request = GovernanceRequest {
content_type: ContentType::Model,
size_bytes: 1_000_000,
accuracy_requirement: 0.5, latency_tolerance_ms: 1000,
admissibility: AdmissibilityClass::Critical,
};
let decision = evaluate(request, &policy).unwrap();
assert_eq!(decision.codec, CodecProfile::Raw);
}
#[test]
fn degradation_budget_accounted() {
let policy = GovernancePolicy::default();
let request = GovernanceRequest {
content_type: ContentType::Image,
size_bytes: 10_000_000,
accuracy_requirement: 0.8,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let decision = evaluate(request, &policy).unwrap();
assert_eq!(decision.codec, CodecProfile::Q4);
assert_eq!(decision.degradation_budget, 0.10);
}
#[test]
fn content_type_routing_matrix() {
let policy = GovernancePolicy::default();
let text_req = GovernanceRequest {
content_type: ContentType::Text,
size_bytes: 1000,
accuracy_requirement: 0.99,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let text_decision = evaluate(text_req, &policy).unwrap();
assert_eq!(text_decision.codec, CodecProfile::Raw);
let image_req = GovernanceRequest {
content_type: ContentType::Image,
size_bytes: 10_000_000,
accuracy_requirement: 0.8,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let image_decision = evaluate(image_req, &policy).unwrap();
assert_eq!(image_decision.codec, CodecProfile::Q4);
let audio_req = GovernanceRequest {
content_type: ContentType::Audio,
size_bytes: 2000,
latency_tolerance_ms: 50,
accuracy_requirement: 0.8,
admissibility: AdmissibilityClass::Standard,
};
let audio_decision = evaluate(audio_req, &policy).unwrap();
assert_eq!(audio_decision.codec, CodecProfile::Turbo);
let video_req = GovernanceRequest {
content_type: ContentType::Video,
size_bytes: 1_000_000,
latency_tolerance_ms: 40,
accuracy_requirement: 0.8,
admissibility: AdmissibilityClass::Standard,
};
let video_decision = evaluate(video_req, &policy).unwrap();
assert_eq!(video_decision.codec, CodecProfile::Turbo);
let structured_req = GovernanceRequest {
content_type: ContentType::Structured,
size_bytes: 1000,
accuracy_requirement: 0.99,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let structured_decision = evaluate(structured_req, &policy).unwrap();
assert_eq!(structured_decision.codec, CodecProfile::Raw);
let model_req = GovernanceRequest {
content_type: ContentType::Model,
size_bytes: 1_000_000,
accuracy_requirement: 0.5,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Critical,
};
let model_decision = evaluate(model_req, &policy).unwrap();
assert_eq!(model_decision.codec, CodecProfile::Raw);
let other_req = GovernanceRequest {
content_type: ContentType::Other,
size_bytes: 1000,
accuracy_requirement: 0.8,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let other_decision = evaluate(other_req, &policy).unwrap();
assert_eq!(other_decision.codec, CodecProfile::Q8);
}
#[test]
fn small_content_bypasses_compression() {
let policy = GovernancePolicy::default();
let request = GovernanceRequest {
content_type: ContentType::Text,
size_bytes: 100, accuracy_requirement: 0.8,
latency_tolerance_ms: 500,
admissibility: AdmissibilityClass::Standard,
};
let decision = evaluate(request, &policy).unwrap();
assert_eq!(decision.codec, CodecProfile::Raw);
}
#[test]
fn codec_profile_degradation_thresholds() {
assert_eq!(CodecProfile::Raw.default_degradation_threshold(), 0.0);
assert_eq!(CodecProfile::Q8.default_degradation_threshold(), 0.05);
assert_eq!(CodecProfile::Q4.default_degradation_threshold(), 0.10);
assert_eq!(CodecProfile::Turbo.default_degradation_threshold(), 0.08);
assert_eq!(CodecProfile::Fib.default_degradation_threshold(), 0.03);
}
#[test]
fn codec_decision_is_direct() {
let decision = CodecDecision::direct(CodecProfile::Q8, 0.05);
assert_eq!(decision.codec, CodecProfile::Q8);
assert!(!decision.exact_fallback);
assert!(!decision.had_fallback());
}