#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Cc001Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_cached_uncached_parity(
cached_tokens: &[u32],
uncached_tokens: &[u32],
) -> Cc001Verdict {
if cached_tokens.is_empty() || uncached_tokens.is_empty() { return Cc001Verdict::Fail; }
if cached_tokens.len() != uncached_tokens.len() { return Cc001Verdict::Fail; }
if cached_tokens == uncached_tokens { Cc001Verdict::Pass } else { Cc001Verdict::Fail }
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Cc002Verdict { Pass, Fail }
#[must_use]
pub const fn verdict_from_single_token_forward(tokens_processed_per_call: u64) -> Cc002Verdict {
if tokens_processed_per_call == 1 { Cc002Verdict::Pass } else { Cc002Verdict::Fail }
}
pub const AC_CC_003_MIN_RATIO: f32 = 0.8;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Cc003Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_throughput_bound(gguf_cpu_tps: f32, apr_cpu_tps: f32) -> Cc003Verdict {
if !gguf_cpu_tps.is_finite() || !apr_cpu_tps.is_finite() { return Cc003Verdict::Fail; }
if gguf_cpu_tps <= 0.0 || apr_cpu_tps <= 0.0 { return Cc003Verdict::Fail; }
let ratio = gguf_cpu_tps / apr_cpu_tps;
if !ratio.is_finite() { return Cc003Verdict::Fail; }
if ratio < AC_CC_003_MIN_RATIO { return Cc003Verdict::Fail; }
Cc003Verdict::Pass
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Cc004Verdict { Pass, Fail }
#[must_use]
pub fn verdict_from_greedy_argmax_parity(
cached_argmax_per_step: &[u32],
uncached_argmax_per_step: &[u32],
) -> Cc004Verdict {
if cached_argmax_per_step.is_empty() || uncached_argmax_per_step.is_empty() {
return Cc004Verdict::Fail;
}
if cached_argmax_per_step.len() != uncached_argmax_per_step.len() {
return Cc004Verdict::Fail;
}
if cached_argmax_per_step == uncached_argmax_per_step {
Cc004Verdict::Pass
} else {
Cc004Verdict::Fail
}
}
#[must_use]
pub const fn no_cache_work(n: u64, layers: u64, matmul_cost: u64) -> u64 {
n.saturating_mul(n.saturating_add(1))
.saturating_div(2)
.saturating_mul(layers)
.saturating_mul(matmul_cost)
}
#[must_use]
pub const fn with_cache_work(n: u64, layers: u64, matmul_cost: u64) -> u64 {
n.saturating_mul(layers).saturating_mul(matmul_cost)
}
#[cfg(test)]
mod tests {
use super::*;
#[test] fn cc001_pass_identical() {
let tokens = [42_u32, 100, 7, 99, 1];
assert_eq!(verdict_from_cached_uncached_parity(&tokens, &tokens), Cc001Verdict::Pass);
}
#[test] fn cc001_fail_drift() {
let cached = [42_u32, 100, 7, 99, 1];
let uncached = [42_u32, 100, 8, 99, 1]; assert_eq!(verdict_from_cached_uncached_parity(&cached, &uncached), Cc001Verdict::Fail);
}
#[test] fn cc001_fail_length() {
let cached = [42_u32, 100];
let uncached = [42_u32, 100, 7];
assert_eq!(verdict_from_cached_uncached_parity(&cached, &uncached), Cc001Verdict::Fail);
}
#[test] fn cc001_fail_empty() {
assert_eq!(verdict_from_cached_uncached_parity(&[], &[]), Cc001Verdict::Fail);
}
#[test] fn cc002_pass_one_token() {
assert_eq!(verdict_from_single_token_forward(1), Cc002Verdict::Pass);
}
#[test] fn cc002_fail_zero() {
assert_eq!(verdict_from_single_token_forward(0), Cc002Verdict::Fail);
}
#[test] fn cc002_fail_above_one() {
assert_eq!(verdict_from_single_token_forward(20), Cc002Verdict::Fail);
}
#[test] fn cc003_pass_above_threshold() {
assert_eq!(verdict_from_throughput_bound(5.0, 6.0), Cc003Verdict::Pass);
}
#[test] fn cc003_pass_at_threshold() {
assert_eq!(verdict_from_throughput_bound(0.8, 1.0), Cc003Verdict::Pass);
}
#[test] fn cc003_fail_below_threshold() {
assert_eq!(verdict_from_throughput_bound(4.0, 6.0), Cc003Verdict::Fail);
}
#[test] fn cc003_fail_pre_fix_baseline() {
assert_eq!(verdict_from_throughput_bound(0.8, 9.0), Cc003Verdict::Fail);
}
#[test] fn cc003_fail_zero_apr() {
assert_eq!(verdict_from_throughput_bound(5.0, 0.0), Cc003Verdict::Fail);
}
#[test] fn cc003_fail_nan() {
assert_eq!(verdict_from_throughput_bound(f32::NAN, 6.0), Cc003Verdict::Fail);
}
#[test] fn cc004_pass_canonical() {
let cached = [100_u32, 200, 300, 400];
let uncached = [100_u32, 200, 300, 400];
assert_eq!(verdict_from_greedy_argmax_parity(&cached, &uncached), Cc004Verdict::Pass);
}
#[test] fn cc004_fail_step_divergence() {
let cached = [100_u32, 200, 300, 400];
let uncached = [100_u32, 200, 999, 400]; assert_eq!(verdict_from_greedy_argmax_parity(&cached, &uncached), Cc004Verdict::Fail);
}
#[test] fn cc004_fail_length() {
let cached = [100_u32];
let uncached = [100_u32, 200];
assert_eq!(verdict_from_greedy_argmax_parity(&cached, &uncached), Cc004Verdict::Fail);
}
#[test] fn work_speedup_at_n20() {
let no_cache = no_cache_work(20, 28, 1_000_000);
let with_cache = with_cache_work(20, 28, 1_000_000);
let ratio = no_cache as f64 / with_cache as f64;
assert!((ratio - 10.5).abs() < 0.001);
}
#[test] fn work_with_cache_linear() {
let w20 = with_cache_work(20, 28, 1000);
let w40 = with_cache_work(40, 28, 1000);
assert_eq!(w40, 2 * w20);
}
#[test] fn work_no_cache_quadratic() {
let w20 = no_cache_work(20, 28, 1000);
let w40 = no_cache_work(40, 28, 1000);
assert!(w40 > 3 * w20);
assert!(w40 < 4 * w20);
}
#[test] fn provenance_constants() {
assert!((AC_CC_003_MIN_RATIO - 0.8).abs() < 1e-9);
}
}