use super::ops::*;
use super::simd::*;
use std::mem::MaybeUninit;
fn as_uninit_mut(slice: &mut [f32]) -> &mut [MaybeUninit<f32>] {
unsafe {
std::slice::from_raw_parts_mut(slice.as_mut_ptr() as *mut MaybeUninit<f32>, slice.len())
}
}
#[test]
fn test_normalize_nan_handling() {
let v = vec![1.0, f32::NAN, 3.0];
let normalized = normalize(&v);
assert_eq!(normalized.len(), 3);
assert!(normalized[1].is_nan());
}
#[test]
fn test_normalize_inf_handling() {
let v = vec![1.0, f32::INFINITY, 3.0];
let normalized = normalize(&v);
assert_eq!(normalized.len(), 3);
assert_eq!(normalized[0], 0.0);
assert!(normalized[1].is_nan());
assert_eq!(normalized[2], 0.0);
}
#[test]
fn test_normalize_zero_handling() {
let v = vec![0.0, 0.0, 0.0];
let normalized = normalize(&v);
assert_eq!(normalized, vec![0.0, 0.0, 0.0]);
}
#[test]
fn test_scale_and_copy_correctness() {
let src = vec![1.0, 2.0, 3.0, 4.0, 5.0];
let mut dst = vec![0.0; 5];
scale_and_copy(&src, as_uninit_mut(&mut dst), 2.0);
assert_eq!(dst, vec![2.0, 4.0, 6.0, 8.0, 10.0]);
}
#[test]
fn test_scale_and_copy_large_vector() {
let len = 1024 + 7; let src: Vec<f32> = (0..len).map(|i| i as f32).collect();
let mut dst = vec![0.0; len];
scale_and_copy(&src, as_uninit_mut(&mut dst), 2.0);
for (i, val) in dst.iter().enumerate() {
assert_eq!(*val, (i as f32) * 2.0);
}
}