use ferray_core::Array;
use ferray_core::dimension::{Axis, Ix1, Ix2};
#[test]
fn divergence_max_signed_zero_keeps_last() {
let a = Array::<f64, Ix1>::from_vec(Ix1::new([2]), vec![0.0, -0.0]).unwrap();
let got = a.max().unwrap();
assert!(
got.is_sign_negative(),
"max([0.0, -0.0]) must be -0.0 (numpy), got {got} sign_negative={}",
got.is_sign_negative()
);
}
#[test]
fn divergence_max_signed_zero_other_order() {
let a = Array::<f64, Ix1>::from_vec(Ix1::new([2]), vec![-0.0, 0.0]).unwrap();
let got = a.max().unwrap();
assert!(
got.is_sign_positive(),
"max([-0.0, 0.0]) must be +0.0 (numpy), got sign_negative={}",
got.is_sign_negative()
);
}
#[test]
fn divergence_min_signed_zero_keeps_last() {
let a = Array::<f64, Ix1>::from_vec(Ix1::new([2]), vec![0.0, -0.0]).unwrap();
let got = a.min().unwrap();
assert!(
got.is_sign_negative(),
"min([0.0, -0.0]) must be -0.0 (numpy), got sign_negative={}",
got.is_sign_negative()
);
}
#[test]
fn divergence_max_axis_signed_zero() {
let a = Array::<f64, Ix2>::from_vec(Ix2::new([2, 2]), vec![0.0, -0.0, -0.0, 0.0]).unwrap();
let m = a.max_axis(Axis(0)).unwrap();
let vals: Vec<f64> = m.iter().copied().collect();
assert!(
vals[0].is_sign_negative() && vals[1].is_sign_positive(),
"max(axis=0) signbits must be [neg, pos] (numpy), got [{}, {}]",
vals[0].is_sign_negative(),
vals[1].is_sign_negative()
);
}