use clock_hash::cpuid::{has_avx, has_avx2};
use clock_hash::simd::dispatch::{is_avx_available, is_avx2_available, is_os_avx_supported};
use clock_hash::simd::scalar::scalar_clock_mix;
fn main() {
println!("=== ClockHash CPUID Debug ===");
let cpuid1 = clock_hash::cpuid::cpuid(1, 0);
let cpuid7 = clock_hash::cpuid::cpuid(7, 0);
println!("CPUID(1,0): EAX={:08x}, EBX={:08x}, ECX={:08x}, EDX={:08x}",
cpuid1.eax, cpuid1.ebx, cpuid1.ecx, cpuid1.edx);
println!("CPUID(7,0): EAX={:08x}, EBX={:08x}, ECX={:08x}, EDX={:08x}",
cpuid7.eax, cpuid7.ebx, cpuid7.ecx, cpuid7.edx);
println!("\n=== AVX Detection ===");
println!("has_avx(): {}", has_avx());
println!("has_avx2(): {}", has_avx2());
println!("is_avx_available(): {}", is_avx_available());
println!("is_os_avx_supported(): {}", is_os_avx_supported());
println!("is_avx2_available(): {}", is_avx2_available());
let avx_bit = (cpuid1.ecx & (1 << 28)) != 0;
let avx2_bit = (cpuid7.ebx & (1 << 5)) != 0;
println!("\nRaw bit checks:");
println!("AVX bit (ECX[28]): {}", avx_bit);
println!("AVX2 bit (EBX[5] in leaf 7): {}", avx2_bit);
println!("\n=== SIMD vs Scalar Test ===");
let test_data = [1u64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
let mut scalar_data = test_data.clone();
println!("Input: {:?}", test_data);
scalar_clock_mix(&mut scalar_data);
println!("Scalar result: {:?}", scalar_data);
println!("\nDebug complete!");
}