use scalars::{
Clamp, Exp, Integer, Inv, InverseTrigonometry, Numeric, One, Real, Sqrt, Trigonometry, Zero,
};
#[test]
fn f32_is_real() {
fn assert_real<T: Real>() {}
assert_real::<f32>();
assert_real::<f64>();
}
#[test]
fn integers_are_integer() {
fn assert_integer<T: Integer>() {}
assert_integer::<i32>();
assert_integer::<u64>();
assert_integer::<usize>();
}
#[test]
fn f32_is_numeric() {
fn assert_numeric<T: Numeric>() {}
assert_numeric::<f32>();
assert_numeric::<i32>();
assert_numeric::<u8>();
}
#[test]
fn zero_one() {
assert!(f32::is_zero(&f32::zero()));
assert!(f64::is_one(&f64::one()));
assert!(i32::is_zero(&i32::zero()));
assert!(u8::is_one(&u8::one()));
}
#[test]
fn inv() {
assert_eq!(Inv::inv(2.0f32), 0.5);
assert_eq!(Inv::inv(4.0f64), 0.25);
}
#[test]
fn sqrt() {
assert_eq!(Sqrt::sqrt(4.0f32), 2.0);
assert_eq!(Sqrt::sqrt(9.0f64), 3.0);
}
#[test]
fn exp() {
assert!((Exp::exp(0.0f32) - 1.0).abs() < 1e-6);
assert!((Exp::exp2(3.0f32) - 8.0).abs() < 1e-6);
}
#[test]
fn trigonometry() {
let [sin, cos] = Trigonometry::sin_cos(0.0f32);
assert!((sin - 0.0).abs() < 1e-6);
assert!((cos - 1.0).abs() < 1e-6);
assert!((Trigonometry::tan(0.0f32)).abs() < 1e-6);
}
#[test]
fn inverse_trigonometry() {
assert!((InverseTrigonometry::asin(0.0f32)).abs() < 1e-6);
assert!((InverseTrigonometry::acos(1.0f32)).abs() < 1e-6);
assert!((InverseTrigonometry::atan(0.0f32)).abs() < 1e-6);
let angle = InverseTrigonometry::atan2(1.0f32, 1.0);
assert!((angle - core::f32::consts::FRAC_PI_4).abs() < 1e-6);
}
#[test]
fn clamp() {
assert_eq!(Clamp::min(3.0f32, 5.0), 3.0);
assert_eq!(Clamp::max(3.0f32, 5.0), 5.0);
assert_eq!(Clamp::clamp(10.0f32, 0.0, 5.0), 5.0);
assert_eq!(Clamp::clamp(-1.0f32, 0.0, 5.0), 0.0);
assert_eq!(Clamp::min(3i32, 5), 3);
assert_eq!(Clamp::max(3i32, 5), 5);
}