use super::*;
#[test]
fn test_gpu_lz4_ptx_has_hash_table() {
let kernel = Lz4WarpCompressKernel::new(100);
let ptx = kernel.emit_ptx();
assert!(
ptx.contains("0x9e3779b1") || ptx.contains("2654435761") || ptx.contains("hash"),
"PTX must have LZ4 hash computation (mul by 0x9E3779B1)"
);
}
#[test]
fn test_gpu_lz4_ptx_has_match_finding() {
let kernel = Lz4WarpCompressKernel::new(100);
let ptx = kernel.emit_ptx();
assert!(
ptx.contains("match") || ptx.contains("L_found_match") || ptx.contains("L_check_match"),
"PTX must have match finding logic with labeled branches"
);
}
#[test]
fn test_gpu_lz4_ptx_has_sequence_encoding() {
let kernel = Lz4WarpCompressKernel::new(100);
let ptx = kernel.emit_ptx();
assert!(
ptx.contains("token") || ptx.contains("L_encode") || ptx.contains("L_write_sequence"),
"PTX must have LZ4 sequence encoding logic"
);
}
#[test]
fn test_gpu_lz4_ptx_has_output_buffer_management() {
let kernel = Lz4WarpCompressKernel::new(100);
let ptx = kernel.emit_ptx();
let has_dynamic_size =
ptx.contains("out_pos") || ptx.contains("L_compress") || ptx.contains("compressed_len");
assert!(has_dynamic_size, "PTX must track output buffer position dynamically for compression");
}
#[test]
fn test_gpu_lz4_kernel_has_compression_loop() {
let kernel = Lz4WarpCompressKernel::new(100);
let ptx = kernel.emit_ptx();
let has_compress_loop = ptx.contains("L_compress_loop")
|| ptx.contains("L_main_loop")
|| (ptx.contains("bra") && ptx.contains("L_loop"));
assert!(
has_compress_loop,
"GPU kernel must have main compression loop (L_compress_loop or similar)"
);
}