use super::super::*;
#[test]
fn test_q4k_ggml_barrier_safety() {
use crate::ptx::optimize::barrier_safety;
let kernel = QuantizeKernel::ggml(32, 32, 256);
let ptx = kernel.emit_ptx();
let result = barrier_safety::analyze(&ptx);
if !result.is_safe {
println!("Q4K GGML barrier_count: {}", result.barrier_count);
println!("Q4K GGML exit_count: {}", result.exit_count);
for v in &result.violations {
println!("Violation at line {}: {:?} - {}", v.line, v.kind, v.instruction);
}
for (i, line) in ptx.lines().enumerate() {
let lineno = i + 1;
if result
.violations
.iter()
.any(|v| v.line.saturating_sub(5) <= lineno && lineno <= v.line.saturating_add(5))
{
println!("{:4}: {}", lineno, line);
}
}
}
assert!(result.is_safe, "Q4K GGML should be barrier-safe: {:?}", result.violations);
}
#[test]
fn test_q5k_barrier_safety() {
use crate::ptx::optimize::barrier_safety;
let kernel = Q5KKernel::new(32, 32, 256);
let ptx = kernel.emit_ptx();
let result = barrier_safety::analyze(&ptx);
assert!(result.is_safe, "Q5K should be barrier-safe: {:?}", result.violations);
}
#[test]
fn test_q6k_barrier_safety() {
use crate::ptx::optimize::barrier_safety;
let kernel = Q6KKernel::new(32, 32, 256);
let ptx = kernel.emit_ptx();
let result = barrier_safety::analyze(&ptx);
assert!(result.is_safe, "Q6K should be barrier-safe: {:?}", result.violations);
}