use zipora::system::cpu_features::get_cpu_features;
use std::arch::x86_64::*;
#[test]
fn test_popcnt_instruction_usage() {
let features = get_cpu_features();
if features.has_popcnt {
println!("✅ POPCNT detected and available");
let test_value = 0x123456789ABCDEF0u64;
let popcount = test_value.count_ones();
assert_eq!(popcount, 32); println!(" POPCNT result verification: ✅");
} else {
println!("⚠️ POPCNT not available on this CPU");
}
}
#[test]
fn test_bmi2_instruction_availability() {
let features = get_cpu_features();
if features.has_bmi2 {
println!("✅ BMI2 detected and available");
#[cfg(target_feature = "bmi2")]
unsafe {
let value = 0x12345678u32;
let mask = 0xFF00FF00u32;
let result = _pdep_u32(value, mask);
println!(" BMI2 PDEP test result: 0x{:X}", result);
assert!(result != 0);
}
println!(" BMI2 availability verification: ✅");
} else {
println!("⚠️ BMI2 not available on this CPU");
}
}
#[test]
fn test_avx2_instruction_availability() {
let features = get_cpu_features();
if features.has_avx2 {
println!("✅ AVX2 detected and available");
#[cfg(target_feature = "avx2")]
unsafe {
let a = _mm256_set1_epi32(42);
let b = _mm256_set1_epi32(8);
let result = _mm256_add_epi32(a, b);
let first_elem = _mm256_extract_epi32(result, 0);
assert_eq!(first_elem, 50); }
println!(" AVX2 availability verification: ✅");
} else {
println!("⚠️ AVX2 not available on this CPU");
}
}
#[test]
fn test_hardware_acceleration_bug_fix() {
println!("🔧 Testing hardware acceleration bug fix...");
let features = get_cpu_features();
if std::env::var("ZIPORA_DISABLE_SIMD").is_ok() {
println!(" ZIPORA_DISABLE_SIMD is set - hardware should be disabled");
assert!(!features.has_popcnt && !features.has_bmi2 && !features.has_avx2);
println!(" ✅ SIMD override working correctly");
} else {
println!(" ZIPORA_DISABLE_SIMD not set - hardware should be detected");
if features.has_popcnt || features.has_bmi2 || features.has_avx2 {
println!(" ✅ Hardware acceleration enabled (at least one feature detected)");
} else {
println!(" ⚠️ No hardware acceleration detected - may be running on older CPU");
}
}
println!(" Verifying the cfg(test) override bug is fixed...");
let has_any_features = features.has_popcnt || features.has_bmi2 || features.has_avx2 ||
features.has_avx512f || features.has_avx512bw || features.has_avx512vpopcntdq;
if std::env::var("ZIPORA_DISABLE_SIMD").is_ok() {
assert!(!has_any_features, "SIMD should be disabled when override is set");
} else {
println!(" Has any hardware features: {}", has_any_features);
}
println!(" ✅ Hardware acceleration bug fix verified");
}
#[test]
fn test_performance_regression_guard() {
println!("🔍 Performance regression guard test...");
let test_data = vec![0x123456789ABCDEF0u64; 10000];
let iterations = 1000;
let start = std::time::Instant::now();
let mut total_bits = 0;
for _ in 0..iterations {
for &value in &test_data {
total_bits += value.count_ones() as u64;
}
}
let elapsed = start.elapsed();
let ops_per_sec = (iterations * test_data.len()) as f64 / elapsed.as_secs_f64();
println!(" POPCNT performance: {:.2} Mops/s", ops_per_sec / 1_000_000.0);
let min_expected_performance = 10_000_000.0;
if ops_per_sec < min_expected_performance {
println!(" ⚠️ WARNING: POPCNT performance below expected ({:.2} Mops/s)",
ops_per_sec / 1_000_000.0);
println!(" This might indicate hardware acceleration is not working");
} else {
println!(" ✅ POPCNT performance meets minimum threshold");
}
assert!(total_bits > 0);
}
#[test]
fn test_benchmark_mode_hardware_detection() {
println!("📊 Testing benchmark mode hardware detection...");
let features = get_cpu_features();
println!(" Detected features:");
println!(" POPCNT: {}", features.has_popcnt);
println!(" BMI2: {}", features.has_bmi2);
println!(" AVX2: {}", features.has_avx2);
if std::env::var("ZIPORA_DISABLE_SIMD").is_ok() {
println!(" SIMD disabled by environment variable ✅");
} else {
if cfg!(target_arch = "x86_64") {
println!(" Running on x86_64 - checking for common features");
if !features.has_popcnt && !features.has_bmi2 && !features.has_avx2 {
println!(" ⚠️ No features detected - might be virtualized or very old CPU");
} else {
println!(" ✅ Hardware features properly detected in test mode");
}
} else {
println!(" ✅ Non-x86_64 architecture - hardware detection working");
}
}
}
#[test]
fn test_integrated_hardware_acceleration() {
println!("🧪 Integrated hardware acceleration test...");
let features = get_cpu_features();
let data_size = 100_000;
let mut bit_vector = vec![0u64; (data_size + 63) / 64];
for i in 0..data_size {
if (i * 0x9e3779b9) & 7 == 0 { let word_idx = i / 64;
let bit_idx = i % 64;
if word_idx < bit_vector.len() {
bit_vector[word_idx] |= 1u64 << bit_idx;
}
}
}
let iterations = 1000;
let start = std::time::Instant::now();
let mut rank_sum = 0;
for i in 0..iterations {
let pos = (i * 997) % data_size;
let word_idx = pos / 64;
let bit_idx = pos % 64;
let mut rank = 0;
for j in 0..word_idx {
if j < bit_vector.len() {
rank += bit_vector[j].count_ones() as usize;
}
}
if word_idx < bit_vector.len() && bit_idx > 0 {
let mask = (1u64 << bit_idx) - 1;
rank += (bit_vector[word_idx] & mask).count_ones() as usize;
}
rank_sum += rank;
}
let elapsed = start.elapsed();
let ops_per_sec = iterations as f64 / elapsed.as_secs_f64();
println!(" Integrated rank performance: {:.2} Kops/s", ops_per_sec / 1000.0);
println!(" Hardware features used:");
println!(" POPCNT: {} (for count_ones)", features.has_popcnt);
println!(" BMI2: {} (for bit manipulation)", features.has_bmi2);
println!(" AVX2: {} (for vectorization)", features.has_avx2);
assert!(rank_sum > 0);
println!(" ✅ Integrated hardware acceleration test completed");
}