use trueno::Vector;
#[test]
fn test_c042_simd_remainder_handling() {
for size in 1..16 {
let a: Vec<f32> = (0..size).map(|i| i as f32).collect();
let b: Vec<f32> = (0..size).map(|i| (size - 1 - i) as f32).collect();
let vec_a = Vector::from_slice(&a);
let vec_b = Vector::from_slice(&b);
let result = vec_a.add(&vec_b).expect("add failed");
for (i, r) in result.as_slice().iter().enumerate() {
let expected = a[i] + b[i];
assert_eq!(
*r, expected,
"C-042 FALSIFIED: Remainder handling incorrect for size {size} at index {i}"
);
}
}
}
#[test]
fn test_c043_empty_input_safety() {
let empty: Vec<f32> = vec![];
let vec_empty = Vector::from_slice(&empty);
assert_eq!(vec_empty.len(), 0);
}
#[test]
fn test_c044_single_element_safety() {
let a = Vector::from_slice(&[1.0f32]);
let b = Vector::from_slice(&[2.0f32]);
let result = a.add(&b).expect("add failed");
assert_eq!(result.as_slice()[0], 3.0);
}
#[test]
fn test_c045_misaligned_pointers() {
let sizes = [3, 5, 7, 9, 11, 13, 15, 17];
for &size in &sizes {
let a: Vec<f32> = (0..size).map(|i| i as f32).collect();
let b: Vec<f32> = (0..size).map(|i| (i + 1) as f32).collect();
let vec_a = Vector::from_slice(&a);
let vec_b = Vector::from_slice(&b);
let result = vec_a.add(&vec_b).expect("add failed");
assert_eq!(
result.as_slice().len(),
size,
"C-045 FALSIFIED: Misaligned pointer handling failed for size {size}"
);
}
}
#[test]
fn test_c046_avx2_register_width() {
let size = 8; let a: Vec<f32> = (0..size).map(|i| i as f32).collect();
let b: Vec<f32> = (0..size).map(|i| (i + 1) as f32).collect();
let vec_a = Vector::from_slice(&a);
let vec_b = Vector::from_slice(&b);
let result = vec_a.add(&vec_b).expect("add failed");
for i in 0..size {
let expected = (i + i + 1) as f32;
assert_eq!(
result.as_slice()[i],
expected,
"C-046 FALSIFIED: AVX2 256-bit operation incorrect at index {i}"
);
}
}
#[test]
fn test_c047_avx512_register_width() {
let size = 16; let a: Vec<f32> = (0..size).map(|i| i as f32).collect();
let b: Vec<f32> = (0..size).map(|i| (i + 1) as f32).collect();
let vec_a = Vector::from_slice(&a);
let vec_b = Vector::from_slice(&b);
let result = vec_a.add(&vec_b).expect("add failed");
for i in 0..size {
let expected = (i + i + 1) as f32;
assert_eq!(
result.as_slice()[i],
expected,
"C-047 FALSIFIED: AVX-512 512-bit operation incorrect at index {i}"
);
}
}
#[test]
fn test_c048_neon_register_width() {
let size = 4; let a: Vec<f32> = (0..size).map(|i| i as f32).collect();
let b: Vec<f32> = (0..size).map(|i| (i + 1) as f32).collect();
let vec_a = Vector::from_slice(&a);
let vec_b = Vector::from_slice(&b);
let result = vec_a.add(&vec_b).expect("add failed");
for i in 0..size {
let expected = (i + i + 1) as f32;
assert_eq!(
result.as_slice()[i],
expected,
"C-048 FALSIFIED: NEON 128-bit operation incorrect at index {i}"
);
}
}
#[test]
fn test_c049_fma_availability() {
let a = Vector::from_slice(&[1.0f32, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]);
let b = Vector::from_slice(&[2.0f32, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]);
let c = Vector::from_slice(&[1.0f32, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]);
let result = a.fma(&b, &c).expect("fma failed");
let expected = [3.0f32, 5.0, 7.0, 9.0, 11.0, 13.0, 15.0, 17.0];
for (i, (r, e)) in result.as_slice().iter().zip(expected.iter()).enumerate() {
let diff = (*r - *e).abs();
assert!(diff < f32::EPSILON, "C-049 FALSIFIED: FMA incorrect at index {i}: {} vs {}", r, e);
}
}
#[test]
fn test_c050_no_denormal_stall() {
use std::time::Instant;
let denormal = f32::from_bits(1); let denormals: Vec<f32> = vec![denormal; 1000];
let normal: Vec<f32> = vec![1.0; 1000];
let vec_denormal = Vector::from_slice(&denormals);
let vec_normal = Vector::from_slice(&normal);
let start = Instant::now();
for _ in 0..100 {
let _ = vec_denormal.add(&vec_denormal);
}
let denormal_time = start.elapsed();
let start = Instant::now();
for _ in 0..100 {
let _ = vec_normal.add(&vec_normal);
}
let normal_time = start.elapsed();
let ratio = denormal_time.as_nanos() as f64 / normal_time.as_nanos() as f64;
assert!(ratio < 100.0, "C-050 WARNING: Denormal operations are {ratio:.1}x slower than normal");
}