#[test]
#[ignore] fn test_f116_gqa_ratio_preservation() {
let configs = [
("tiny", ModelConfig::tiny()),
("small", ModelConfig::small()),
("qwen", ModelConfig::qwen_1_5b()),
];
for (name, config) in configs {
let original_ratio = config.num_heads / config.num_kv_heads;
let gguf = GgufFixture::new(config.clone(), QuantType::F32, 42);
let apr = gguf.convert_to(ModelFormat::APR).expect("apr");
let st = apr.convert_to(ModelFormat::Safetensors).expect("st");
let apr_ratio = apr.config().num_heads / apr.config().num_kv_heads;
let st_ratio = st.config().num_heads / st.config().num_kv_heads;
assert_eq!(
original_ratio, apr_ratio,
"{}: GQA ratio changed GGUF->APR ({} -> {})",
name, original_ratio, apr_ratio
);
assert_eq!(
original_ratio, st_ratio,
"{}: GQA ratio changed APR->Safetensors ({} -> {})",
name, original_ratio, st_ratio
);
}
}
#[test]
fn test_f117_vocab_size_boundaries() {
let mut min_config = ModelConfig::tiny();
min_config.vocab_size = 2;
let fixture = GgufFixture::new(min_config, QuantType::F32, 42);
let result = fixture.forward(Device::Cpu, &[0, 1]);
assert!(result.is_ok(), "Min vocab size should work");
assert_eq!(result.expect("expected value").len(), 2);
}
#[test]
fn test_f118_hidden_dim_divisibility() {
let config = ModelConfig::tiny();
assert_eq!(
config.hidden_dim % config.num_heads,
0,
"hidden_dim {} must be divisible by num_heads {}",
config.hidden_dim,
config.num_heads
);
assert_eq!(config.head_dim() * config.num_heads, config.hidden_dim);
}
fn all_model_configs() -> [ModelConfig; 4] {
[
ModelConfig::tiny(),
ModelConfig::small(),
ModelConfig::tinyllama(),
ModelConfig::qwen_1_5b(),
]
}
#[test]
fn test_f119_rope_theta_sanity() {
for config in all_model_configs() {
assert!(
config.rope_theta > 0.0,
"rope_theta {} must be positive",
config.rope_theta
);
assert!(config.rope_theta.is_finite(), "rope_theta must be finite");
}
}
#[test]
fn test_f120_rms_norm_eps_sanity() {
for config in all_model_configs() {
assert!(
config.rms_norm_eps > 0.0,
"rms_norm_eps {} must be positive",
config.rms_norm_eps
);
assert!(
config.rms_norm_eps < 1e-3,
"rms_norm_eps {} should be small",
config.rms_norm_eps
);
}
}